Tag: excel interop

从Excel中读取数据SpreadSheet – 无法对空引用执行运行时绑定

我有下面的代码来读取Excel文件中的数据,我遇到的问题是,当我尝试读取范围数据,我得到一个exception“不能执行空引用上的运行时绑定”在这一行 if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value)) 我想知道的是如何正确访问范围内的信息。 提前致谢 void ReadFromExcelToGrid2(String fileNameString) { try { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fileNameString); //get list of worksheets associated with the current workbook Microsoft.Office.Interop.Excel.Sheets worksheets = xlWorkbook.Worksheets; //list the work books in a dropdownlist IDictionary<int, String> sheets = new Dictionary<int, String>(); foreach (Microsoft.Office.Interop.Excel.Worksheet displayWorksheet in xlWorkbook.Worksheets) […]

使用Excel Interop和Excel中的Excel中的单元格内容

我正在试图将中心将被用作标题的单元格的值。 这是我目前用来格式化这些单元格的代码。 我正在使用C#的Excel Interop。 我如何在这个单元格范围内的值。 public void createHeaders(int row, int col, string htext, string cell1, string cell2, int mergeColumns, string b, bool font, int size, string fcolor) { worksheet.Cells[row, col] = htext; workSheet_range = worksheet.get_Range(cell1, cell2); workSheet_range.Merge(mergeColumns); switch (b) { case "BLUE": workSheet_range.Interior.Color = System.Drawing.Color.Red.ToArgb(); break; case "GAINSBORO": workSheet_range.Interior.Color = System.Drawing.Color.Gainsboro.ToArgb(); break; //case "Turquoise": // […]

生成服务器中的Microsoft.Office.Interop.Excel参考

我在Windows服务应用程序中使用Microsoft.Office.Interop.Excel参考来创buildExcel报告。 应用程序在DEV机器中生成,但是在生成机器中失败,说“命名空间”Microsoft“中没有types或命名空间名称”Office“(是否缺less程序集引用? 它在DEV机器上工作,因为已经安装了MS Excel 2010。 但在生成服务器,MS Excel没有安装。 我的问题是,在生成服务器中安装MS Excel是强制性的生成要成功,或者我可以将Microsoft.Office.Interop.Excel.dll复制到我的项目文件夹中,引用它并签入生成。 目前,应用程序中添加的dll引用指向程序集(GAC)。 还有一件事要知道的是,这些互操作的DLL不是可重新分配的,因为它们是MS_Office产品的一部分。 请在这方面build议我正确的做法。

Excel Range.Find和维护用户select的查找选项

当使用Excel Interop API自动执行excel时,我可以使用Range.Find方法轻松地进行范围search。 我正在通过查找的LookIn,LookAt,SearchOrder,SearchDirection和MatchCase选项。 如MSDN文档所述,将传入此方法的值保留到用户设置中,所以下次用户打开查找表单时,将会select在Range.Find方法中使用的选项。 在执行程序化查找之前和之后,我需要坚持查找选项的值。 所以我想捕获当前的查找选项,然后执行Range.Find,然后将查找选项设置回search前设置的选项。 但是,我没有看到查找选项是公开的。 任何想法如何得到这些? 我基本上希望检索LookIn,LookAt,SearchOrder,SearchDirection和MatchCase的当前查找选项值。 更新迄今为止我能find的最有趣的事情是,您可以访问Excel应用程序对话框 – 对话框界面 。 所以在这里,我可以访问FormulaFind对话框,该对话框与“查找和replace”对话框略有不同,但可能会导致我正在查找的一些属性。 我没有任何运气,但也许有一种方法可以通过这种forms使用reflection来访问属性。 我会继续尝试这个。 // xlDialogFormulaFind, xlDialogFormulaReplace Excel.Dialog dialog = this.Application.Dialogs.Item[Excel.XlBuiltInDialog.xlDialogFormulaFind];

C#编写文本序列号作为Excel文件中的date

我写了一个parsing器,它使用Spire.xls库从Excel工作表中获取一些信息,然后将信息写入另一个Excel文件。 我遇到了一个奇怪的问题。 出于某种原因,该程序正在采取序列号如 03-02281 03-02282 03-01975 并将它们写入Excel表格中 3/1/2281 3/1/2282 3/1/1975 这只发生在一些值上。 其他人如 30-04761 03-00613 03-00614 没有改变。 我检查了excel文件,这些字段被设置为text格式。 所以他们要么原来的方式存储或Excel解释序列号为date。 其他可能性是,它不会在原始文件中发生,如果我手动input正确的值,文本不会自动更正/更改。 有没有人知道为什么会发生这种情况,我怎么可以告诉Excel把它们当作文本来处理? 我虽然在每个值的开头添加了一个' to ' ,但是这些必须被其他parsing器读取,所以这不是最方便的select。 编辑:这是我使用的一些代码,希望它可以给你们一个想法,我要去哪里错了。 这是添加所有值的代码: Workbook workbook = new Workbook(); workbook.LoadFromFile(templateExcelFileUri); Worksheet sheet = workbook.Worksheets[0]; int ColumnIndex = 0; //for the datatable columns iteration int columnCounter = 1; //for the excel sheet columns iteration […]

Excel Interop(插入图像)在Windows Server 2012 R2中

我们正在将我们的Web应用程序从Windows 2003迁移到Windows 2012 R2。 该应用程序具有Excel报告function。 我们使用Interop打开excel(模板文件)并写入一些数据,并从服务器中的特定文件夹插入图像。 MS Office版本是2007.奇怪的是插入图像function仅适用于图像大小小于20 kb,只要应用程序试图插入大于20 kb像250 kb的图像,系统挂起,如果它没有得到足够的内存来完成这项工作,并在任务pipe理器中挂起excel.exe。 在Dcomcnfg中,excel正在“启动用户”身份下运行。 IIS应用程序池正在使用networking服务来运行该应用程序。 插入图像的代码如下所示,但是因为它在Windows 2003中工作,所以我们没有改变任何东西 public void InsertImage(string imagePath, float leftPosition, float topPosition, float imageWidth, float heightImage) { if (!File.Exists(imagePath)) throw new OfficeHelperException(OfficeHelperException.ExceptionType.ImageFileNotFound); WorkingSheet.Shapes.AddPicture( imagePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, leftPosition, topPosition, imageWidth, heightImage); } 有没有在新的Windows 2012 R2的内存分配设置? 该Web应用程序有其他Excel报告,没有图像导出,他们工作正常。 我们试图通过在模板文件中放入一个macros来删除这个插入图像的function,这个模板文件将插入图像并从互操作中调用macros。 它在本地机器上工作,但是在服务器上,当图像大小超过20kb时,它会挂起。 我们坚持这一点,不知道任何已知的问题与Windows Server 2012 R2有关的Excel Interop。 任何build议将不胜感激。

能够生成Excel报表并将其推送到客户端计算机,而无需将文件保存在服务器中

目前我从表中获取数据并将其转换为Excel工作簿,然后将其保存在服务器空间中,然后使用Response类将文件推送到客户机。 代码工作正常。 但我有一个想法,不存储在物理存储的文件,因为它增加了服务器存储,并直接推送到客户端机器。 请以任何方式提供build议。 提前致谢。 protected void GenerateExcelFile() { string data = null; int i = 0; int j = 0; Application xlApp; Workbook xlWorkBook; Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Application(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1); DataSet ds = new DataSet(); ds = GetTableData();// Returns dataset for (int k = […]

如何添加网格线到一个工作表而不是其他(C#Excel Interop)?

类似于这里的一些答案,我将Excel文件中的网格线closures: private ApplicationClass _xlApp; . . . _xlApp = new ApplicationClass { UserControl = true }; _xlApp.ActiveWindow.DisplayGridlines = false; 但是,在我的工作簿中,我创build了两张纸,第二张纸需要显示网格线。 如何在工作表级切换显示网格线? 我试过这个: private ApplicationClass _xlApp; private ApplicationClass _xlApp2; . . . _xlApp = new ApplicationClass { UserControl = true }; _xlApp.ActiveWindow.DisplayGridlines = false; . . . _xlApp2 = new ApplicationClass { UserControl = true }; […]

Powershell将数据粘贴到现有工作表中

我有一个脚本,从现有的.csv文件中获取数据并将其复制到现有的工作簿(xlsx)中。 问题:它总是在工作簿中创build一个新工作表。 我想将数据添加到我目前的工作表,并开始在A5而不是顶部。 这是我的 $source = 'C:\Scripts\monthly.csv' # source's fullpath $target = 'C:\Scripts\template.xlsx' # destination's fullpath $xl = new-object -com excel.application # creates Excel COM object in powershell $xl.displayAlerts = $false # don't prompt the user $wb2 = $xl.workbooks.open($source, $null, $true) # open source, readonly $wb1 = $xl.workbooks.open($target) # open target $sh1_wb1 = $wb1.sheets.item('triarqnew') # […]

(object )range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault)导致转换错误

错误: Cannot convert type 'string' to 'object[*,*]' 这是我得到的错误。 有人能给我一些指针,以便我可以避免它? 谢谢。 注意: 有趣的是, (object[,])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault) 当range.Count == 1时只会产生这个bug。 当count等于或大于2时,它工作正常。 示例代码: object[,] arrValue; //global variable private string[] createFormulaCollection() { ArrayList s = new ArrayList(); try { //look at the currently active excel sheet //iterate through cells (not Null) and find the one contains IES(…) //save it into the […]