Tag: excel interop

c#修改后的Excel文件:Ctrl + DownArrow无法正常工作

伙计们! 在我的c#应用程序中创buildExcel文档后,Ctrl + DownArrow组合不能正常工作。 它转到当前列的最后一行。 所以看起来像它意味着所有工作表作为一个数据区域没有空单元格。 所以我猜我的Excel表单中的空单元格不是空的Excel。 如何弄清楚? 谢谢,

如何在Excel Interop中优化导出数据excel?

我正在使用Excel互操作来从我的查询结果创buildExcel工作簿。 当有成千上万条logging时,需要很长时间才能生成工作簿。 下面的代码是我如何填充单元格的示例。 RowNo = 1 For i = 1 To 4000 ColNo = 1 For j = 1 To 5 Dim cell As excel.Range = ws.Cells(RowNo, ColNo) Dim value = j cell.Value = value ColNo = ColNo + 1 Next RowNo = RowNo + 1 Next 上面的代码运行需要一分多钟。 我怎样才能优化它?

插入到Excel表格中的语法错误

我试图插入数据到Excel文件中的第二张,但它给出了语法错误。 我试图在sheet1中插入相同的语法,它工作正常。 表名是正确的,列名是正确的。 我的代码是 try { System.Data.OleDb.OleDbConnection MyConnection; System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); string sql = null; MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='d:\\contacts_moorthy.xls';Extended Properties=Excel 8.0;"); MyConnection.Open(); myCommand.Connection = MyConnection; sql = "insert into [Sheet2$] (To,Message,SentOn) values ('" + phonetxtbox.Text + "','" + messagetxtbox.Text + "','"+DateTime.Now+"')"; myCommand.CommandText = sql; myCommand.ExecuteNonQuery(); MyConnection.Close(); } catch (Exception ex) { MessageBox.Show("Error […]

当xlCoerce返回一个值时,它是否再次在单元格中计算公式?

当我在Excel中用C#编写一个简单的UDF时,我遇到了一个问题 该function使用这个: var reference = XlCall.Excel(XlCall.xlfCaller); string oldValue = ((ExcelReference)reference).GetValue().ToString(); 这将导致循环引用错误( GetValue尝试通过再次调用UDF来重新评估单元格),除非我指定了IsMacroType=true ,它将该函数标记为类2(将#添加到公式中)。 我不知道如何连接到循环错误。 但我猜ExcelReference.GetValue()有时会评估单元格,有时不是? 看来2类只影响xlfCaller , 后来我检查了ExcelReference的源代码,事实certificate,它实际上是调用xlCoerce。 另外,我注意到当我在单元格上按F2时,无论单元格是什么, GetValue()返回0。 而当我按Ctrl + Alt + F9强制重新计算所有, GetValue()返回以前的计算值。 有人能再详细说一下吗? xlCoerce是如何在单元值/公式上工作的,第二类如何影响它?

删除Excel文档操作窗格

我们可以使用开发人员 – >扩展包 – > Microsoft操作窗格 – >附加将文档操作窗格附加到任何Excel文件。 一旦保存了excel,再次打开它以前将存储excel文件。 我有一个Excel文件(请参考图像),我希望删除(分离)文件操作窗格使用C#中的互操作编程。 这可能吗? 代码片段: Application xlApp = null; try { xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); string versionNo = xlApp.Version; xlApp.Visible = true; Microsoft.Office.Core.MsoAutomationSecurity mso = xlApp.AutomationSecurity; xlApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable; Workbook newWb = xlApp.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // Here […]

Cells.Formula =“= CONCATENATE(…)”exception0x800A03EC

我正在编写一个生成Excel文件的VB.NET应用程序。 我的意图是写一个在单元格中使用CONCATENATE的特定公式。 现在,下面这行代码触发了上面的exception: 0) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = "=CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)" 以下行不会引发exception。 (这只是上面的那一行,没有在开头就是这样,它不会引发exception,这意味着索引被正确使用了,下面的段落中我将把它们去掉以减轻这个表示)。 另外,如果我手动把excel放在同一个公式的前面,那么公式就会给出正确的结果(正确地抓取Batches!J3 ) 1) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = "CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)" 下面这行也没有问题: 2) tSheet.Cells(indexes).Formula = "=CONCATENATE(" & Pixels(PixelIndex) & ")" 这条线也是如此: 3) tSheet.Cells(indexes).Formula = "=CONCATENATE(Batches!J3)" 似乎只有2)和3)的组合才会引起例外。 我使用的是Visual Studio 2012,Excel […]

将数据从表单上的多个DataGridViews导出到单个Excel文件中的多个Excel表格

我有一个数据库应用程序,它在Form上有多个dataGridViews 。 我能够成功地将一个网格视图导出到Excel工作表,但是我想将网格导出到单个Excel文件中的不同Excel工作表。 我尝试了以下哪些不起作用。 public void ExportGridViewToExcel(DataGridView dataGridViewCommission, DataGridView dataGridViewPaymentsReceived, string commissionsheet, string paymentsheet) { // creating Excel Application Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); // creating new WorkBook within Excel application Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); // creating new Excelsheet in workbook Microsoft.Office.Interop.Excel._Worksheet worksheet1 = null; Microsoft.Office.Interop.Excel._Worksheet worksheet2 = null; // see the excel sheet behind […]

获取types下拉列表的形状

这是我想要改进的一些可怕的代码: Excel.Shapes theShapes = excelSheet.Shapes; foreach (Excel.Shape aShape in theShapes) { foreach (var groupItem in aShape.GroupItems) { //Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(groupItem)); var s = (Excel.Shape) groupItem; if (s is Excel.OLEObject) continue; try { if (s.FormControlType == Excel.XlFormControl.xlDropDown) { Console.WriteLine("### " + s.Name); } } catch (Exception e) { } } } 有没有办法获得下拉列表更容易? 当我尝试获取FormControlType时,如何避免上述exception?

如何计算值大于0的数据透视表的行数

我有一个SQL视图返回包含几个“值”列的行。 为了简单起见,我们称之为“ AmountA ,“ AmountB和“ AmountC 。 我在Excel中使用数据透视表来为这些数据创build一个报告。 数据透视表的源范围通常使用.Netreflection生成,然后使用Excel Interop推送到Excel。 透视表也是使用Excel Interopdynamic生成/configuration的。 我需要计算并显示一个字段,它将计算AmountA大于0的行数。对于AmountB和AmountC我也需要做相同的AmountC 。 结果应按照以下顺序显示在数据透视表中同一行级别上: AmountA – CountA – AmountB – CountB – AmountC – CountC 。 为了更好地理解我想要完成什么,请考虑一个由count概括的数据透视表字段,但是其行为类似于COUNTIF函数。 例如,如果组ProductX有10行,只有8行的AmountA大于0,则应显示CountA为8。 我已经尝试添加公式=IF(AmountA>0,1,0)的计算字段,然后求和该字段,但似乎该公式应用于分组值,而不是每个行的实际AmountA 。 例如,如果组ProductX的Sum of AmountA大于0,即使AmountA大于0的行的实际计数为8,它也将显示1的计数( Sum of AmountA > 0的Sum of AmountA )。 我还考虑在源范围中添加使用类似于=IF(AmountA>0,1,0)公式的新列,然后在数据透视表中将它们包括在内。 不过,我想避免这种情况,因为我一般会生成源范围,并且调整这将需要大量的重构。 我曾想过在视图中添加额外的列来表示计数,但我认为视图不应该负责呈现数据。 这将是报告的工作。 另外,我不能看到一个CountA列如何与每一行相关,因为它有或没有一个大于0的AmountA 。 那么,是否有可能在数据透视表字段中重现COUNTIF行为,还是应该考虑在别处处理计数?

使用C#访问Excel电子表格中的表格

我正在编写一个程序(使用C#,使用Microsoft.Office.Interop.Excel),它读取Excel电子表格,并将filter等应用于其中的数据。 然而,我正在努力解决一些问题,即如何“获取”表示我正在使用的数据表的表格对象。 我希望能够通过他们的头来访问列,所以我认为我会需要DataTable命名空间。 但是我似乎无法弄清楚该怎么做。 以下是我的代码的粗略框架: private void Process(Workbook workBook) { try { Worksheet sheet = workBook.Sheets["x"]; Range range = sheet.UsedRange; // what goes here in order to access columns by name? } catch (Exception ex) { } } 我真的不知道如何去做这个,所以任何帮助,以及有关如何使用Microsoft.Office.Excel.Interop的有用的文章的任何build议,真的很受欢迎。 我真的一直无法find适合我需求的资源。 非常感谢你!