Tag: excel interop

如何将自定义XML添加到使用C#打开的Excel 2007工作簿?

我正在尝试使用C#将一个自定义XML添加到打开的Excel 2007工作簿中。 我正在使用Microsoft.Office.Interop.Excel作为接口。 我发现有一个CustomXMLPart类,但我不知道如何使用它。 最初我希望代码是这样简单的: CustomXMLPart myXMLPart = new CustomXMLPart(xmlString); myWorkBook.XMLCustomParts.Add(myXMLPart); 但这并不是接近工作。 我试着在网上find例子,但他们是复杂的谈论包,加载项,OpenXML,VSTOstream等。我已经解压缩一个合适的工作簿(xlsx),并发现它有docProps / custom.xml元素。 我只想在保存之前添加一个类似的custom.xml到新的工作簿(2007)。 这可能吗? 请注意我不能安装任何额外的软件包或库。 编辑:我已经做了更多的调查这个问题的进展。 我相信我有正确的Office引用(COM下的Microsoft Office 12.0对象库)和Excel互操作引用(GAC下的Microsoft.Office.Interop.Excel)。 声明 Microsoft.Office.Core.CustomXMLParts myCustomXMLParts; 编译,但是 Microsoft.Office.Core.CustomXMLParts myCustomXMLParts = Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts; 导致错误消息:错误CS0029:无法隐式地将typesMicrosoft.Office.Core.CustomXMLParts转换为Microsoft.Office.Core.CustomXMLParts。 当我将鼠标hover在Excel CustomXMLParts属性上时,声明返回一个CustomXMLParts对象,这在某种意义上是Microsoft.Office.Core.CustomXMLParts对象,但与Office程序集中的对象不完全相同。 所以在这里显然有一些不兼容性,但我无法解决它。 我安装了Microsoft Office Professional Plus 2007(12.0.6612.1000)和Office 2007主互操作程序集(12.0.4518.1014)。 编辑:我相当肯定,这是Office DLL的问题。 在添加引用上,我看到“Microsoft Office 12.0对象库”,并可以添加它没有任何错误。 它在参考下显示为“办公室”。 然而,它似乎是不可见的,而仍然声称Microsoft.Office.Core定义在未引用的程序集,并指定程序集“办公室”,版本= 12.0.0.0。 我的Office引用已链接到Microsoft Shared / OFFICE12下的MSO.DLL,并具有属性下的主版本2次版本4。 这很重要吗? 或者是错误信息只是表明它没有处理这个引用的原因? 编辑:添加COM对象“Microsoft […]

如何迭代Excel._Worksheet中的所有行?

我正在寻找以编程方式从Excel工作表中拉出数据并将其插入到数据库表中。 如何确定工作表中的列数和行数,或者是否重复这些行? 我有 Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet; 我尝试了worksheet.Range.Rows.Count 扔掉了 索引属性“Microsoft.Office.Interop.Excel._Worksheet.Range”具有必须提供的非可选参数 需要做什么?

我如何过滤EPPlus中的列(而不是行)?

在EPPlus中过滤特定列中的行非常简单: private ExcelWorksheet prodUsageWorksheet; . . . prodUsageWorksheet.Cells["A6:A6"].AutoFilter = true; 这允许我筛选列A中的行: 我还需要过滤某些列,比如月份列(在屏幕截图中,9月15日和10月15日,但通常是多个)。 例如,我想用EPPlus编程生成以下代码: 取消select“全部select”,select一个月的子集,然后单击“确定”button,不select折叠。 看一些传统的Excel Interop代码,似乎在那里,它是这样做的: fld = ((PivotField) pvt.PivotFields("Month")); fld.Orientation = XlPivotFieldOrientation.xlColumnField; fld.NumberFormat = "MMM yy"; 具体而言,第二个代码块(方向设置为xlColumnField )是运行sorting/filterbutton的列,在操作时,该列有条件地显示/隐藏各种列。 是否根据数字格式确定哪些列是可显示/可隐藏的? 也就是说,如果价值是“9月15日”或“10月16日”? 我不知道,但我不能看到代码中更具体地设置列过滤的限制。 无论如何,如果这是Excel Interop如何完成它的话,EPPlus中的等价物是什么?

服务器执行失败(HRESULTexception:0x80080005(CO_E_SERVER_EXEC_FAILURE))

我正在尝试使用Microsoft.Office.Interop.Excel.Workbook类将.xls文件转换为服务器端上的.xlsx文件,如下所示: workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 我得到以下错误: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to […]

使用Interop从Excel中获取最后一个非空列和行索引

我试图从使用Interop库的Excel文件中删除所有多余的空行和列。 我跟着这个问题最快的方法来删除空行和列从Excel文件使用互操作 ,我觉得很有帮助。 但我有Excel文件包含一小部分的数据,但很多空行和列(从最后一个非空行(或列)到工作表的结尾) 我试着循环遍历行和列,但循环需要几个小时。 我想获得最后一个非空的行和列索引,所以我可以删除一行中的整个空范围 XlWks.Range("…").EntireRow.Delete(xlShiftUp) 注意:我试图让包含数据的最后一行删除所有额外的空白(在这一行或列之后) 有什么build议么?

使用Interop从Excel文件中删除空行和列的最快速的方法

我有很多包含数据的Excel文件,它包含空行和空列。 如下图所示 我正在尝试使用互操作从Excel中删除空行和列。 我创build了一个简单的winform应用程序,并使用下面的代码,它工作正常。 Dim lstFiles As New List(Of String) lstFiles.AddRange(IO.Directory.GetFiles(m_strFolderPath, "*.xls", IO.SearchOption.AllDirectories)) Dim m_XlApp = New Excel.Application Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks Dim m_xlWrkb As Excel.Workbook For Each strFile As String In lstFiles m_xlWrkb = m_xlWrkbs.Open(strFile) Dim m_XlWrkSheet As Excel.Worksheet = m_xlWrkb.Worksheets(1) Dim intRow As Integer = 1 While intRow <= m_XlWrkSheet.UsedRange.Rows.Count If […]

如何使用Microsoft.Office.Interop.Excel从Excel导入到DataSet?

我想做的事 我试图使用Microsoft.Office.Interop.Excel命名空间来打开一个Excel文件(XSL或CSV,但不幸的是不是 XSLX),并将其导入到DataSet中。 我无法控制工作表或列名,所以我需要允许对它们进行更改。 我试过了 过去我已经尝试过这种OLEDB方法 ,并且有很多问题(bug,慢,并且需要事先了解Excel文件的模式),所以我想避免再这样做。 我想要做的是使用Microsoft.Office.Interop.Excel将工作簿直接导入到数据集,或循环通过工作表,并加载到DataTable中的每一个。 相信与否,我一直在寻找资源的麻烦。 在StackOverflow的一些search发现大多数人试图做相反(DataSet => Excel),或OLEDB技术。 Google没有太多帮助。 到目前为止我所拥有的 public void Load(string filename, Excel.XlFileFormat format = Excel.XlFileFormat.xlCSV) { app = new Excel.Application(); book = app.Workbooks.Open(Filename: filename, Format: format); DataSet ds = new DataSet(); foreach (Excel.Worksheet sheet in book.Sheets) { DataTable dt = new DataTable(sheet.Name); ds.Tables.Add(dt); //??? Fill dt from sheet […]

如何使用Excel Interop保存/覆盖现有的Excel文件 – C#

有没有办法通过excel互操作保存到Excel电子表格(在这种情况下,我正在添加一个工作表),而没有提示用户,如果他们想覆盖现有的文件的变化。 我不希望用户甚至看到我的应用程序中打开的电子表格,所以有一个消息框popup,询问他们是否要覆盖文件似乎很不合适,可能会混淆用户。 我正在使用workbook.SaveAs(fileloaction)方法。 这里是我正在初始化excel互操作的COM参考对象。 private Excel.Application app = null; private Excel.Workbook workbook = null; public Excel.Workbook Workbook { get { return workbook; } set { workbook = value; } } private Excel.Worksheet worksheet = null; private Excel.Range workSheet_range = null; 下面是我用来closures/保存excel文件的代码。 workbook.close()方法行是据报道引发未处理的exception。 workbook.Close(true, startForm.excelFileLocation, Missing.Value); Marshal.ReleaseComObject(app); app = null; System.GC.Collect();

Microsoft.Office.Interop.Excel.ApplicationClass没有定义的构造函数

我试图按照如何在C#教程中打开一个Excel文件 ,即在Com选项卡上添加一个引用到Microsoft Office 14.0 Object Library并尝试编译代码: using Excel = Microsoft.Office.Interop.Excel; //… Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; xlApp = new Excel.ApplicationClass();//error here //… 并面临编译时的错误,说 没有为Microsoft.Office.Interop.Excel.ApplicationClasstypes定义构造函数。 我错过了什么?

如何closures – 不保存具有自定义函数的Excel / xlsm工作簿,从C#

我有一个使用Interop.Excel从C#WindowsForms应用程序打开的具有自定义非时间依赖单元格函数的Excel工作簿。 我从它读取四个值,不执行明确的更改/计算,然后从C#closures它。 当我尝试直接closures(不保存),我得到一个保存提示。 我怀疑这是因为Excel正在将开放时的自动重新计算解释为创build更改,即使没有实际的数字或公式更改。 我也设置Excel.Application.Calculation = Excel.XlCalculation.xlCalculationManual 。 如何防止保存提示出现,并closures – 不保存?