Tag: c#

Excel错误HRESULT:0x800A03EC尝试获取单元格名称的范围

我正在使用Window Service项目。 必须按顺序将数据写入Excel文件中。 但有些时候,有时候,服务抛出exception“exception从HRESULT:0x800A03EC”,而它试图获取单元格名称的范围。 我已经把打开excel表单的代码,并在这里获取单元格。 OS:窗口服务器2003 Office: Microsoft Office 2003 sp2 1:打开Excel表格 m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5, "", "", true, Excels.XlPlatform.xlWindows, ";", true, false, 0, true, 0, 0); 2:让细胞写作 protected object m_MissingValue = System.Reflection.Missing.Value; Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue); // error from this method, and cell name is string.

以编程方式获取最后填充的Excel行使用C#

我正在尝试使用Microsoft.interop.Excel库和C#以编程方式获取Excel表格的最后一行。 我想这样做,因为我负责循环查看Excel电子表格的所有logging并对它们执行某种操作。 具体来说,我需要最后一行的实际数字,因为我将这个数字放入函数中。 任何人有任何想法如何做到这一点?

我如何过滤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中的等价物是什么?

通过WebApi调用从页面下载excel文件

我试图发送一个9MB的.xls文件作为从Web API控制器方法的响应。 用户将点击页面上的button,这将通过浏览器触发下载。 这是我到目前为止,但它不起作用,但它也不会抛出任何例外。 [AcceptVerbs("GET")] public HttpResponseMessage ExportXls() { try { byte[] excelData = m_toolsService.ExportToExcelFile(); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); var stream = new MemoryStream(excelData); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Data.xls" }; return result; } catch (Exception ex) { m_logger.ErrorException("Exception exporting as excel file: ", […]

MemoryStream似乎在NPOI workbook.write后closures?

我正在使用NPOI将DataTable转换为ASP.NET Web API项目中的Excel。 但是,我没有收到任何回应。 这是我的代码: public HttpResponseMessage GetExcelFromDataTable(DataTable dt) { IWorkbook workbook = new XSSFWorkbook(); // create *.xlsx file, use HSSFWorkbook() for creating *.xls file. ISheet sheet1 = workbook.CreateSheet(); IRow row1 = sheet1.CreateRow(0); for (int i = 0; dt.Columns.Count > i; i++) { row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } for (int i = 0; dt.Rows.Count > i; i++) { […]

使用EPPlus打开Excel文档

我正在尝试使用EPPlus参考/包打开Excel文档。 我无法打开Excel应用程序。 我错过了什么代码? protected void BtnTest_Click(object sender, EventArgs e) { FileInfo newFile = new FileInfo("C:\\Users\\Scott.Atkinson\\Desktop\\Book.xls"); ExcelPackage pck = new ExcelPackage(newFile); //Add the Content sheet var ws = pck.Workbook.Worksheets.Add("Content"); ws.View.ShowGridLines = false; ws.Column(4).OutlineLevel = 1; ws.Column(4).Collapsed = true; ws.Column(5).OutlineLevel = 1; ws.Column(5).Collapsed = true; ws.OutLineSummaryRight = true; //Headers ws.Cells["B1"].Value = "Name"; ws.Cells["C1"].Value = "Size"; ws.Cells["D1"].Value = […]

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

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

如何使用后期绑定来获得excel实例?

我在用着 [DllImport("Oleacc.dll")] static extern int AccessibleObjectFromWindow( int hwnd, uint dwObjectID, byte[] riid, ref Excel.Window ptr); 使用他的句柄得到一个Excel实例,我从excel实例的进程ID中得到这个句柄。 这是我使用这些function时的样子 const uint OBJID_NATIVEOM = 0xFFFFFFF0; Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}"); Excel.Window ptr = null; int hr = AccessibleObjectFromWindow(hwndChild, OBJID_NATIVEOM, IID_IDispatch.ToByteArray(), ref ptr); Object objApp = ptr.Application; 代码的这种和平效果很好,但唯一的问题是我不得不添加对Office 2003主互操作程序集的引用。 正如你所看到的,函数中的最后一个参数是我需要添加引用到Pias的原因,所以我的问题是如果有一种方法可以避免使用Interop程序集,我已经尝试了后期绑定,但也许我一直在做错了,因为我一直无法做到这一点。

如何处理来自embedded式Excel.OleObjects或Excel.Shapes的事件

我正在处理旧的VBA程序的C#和VB.NET端口。 它有很多MSForms/OleObjectsembedded在它像CommandButton甚至图像。 我的第一个想法是将所有的button声明为Microsoft.Vbe.Interop.Forms.CommandButton但是导致COMexception, System._COM type不能转换为…Forms.CommandButton 。 如果我尝试一个更通用的解决scheme版本,我没有find任何项目,如果我尝试通过所有的VBComponet s我注意到,他们都是workbook中的workbook ,但没有控制: foreach (VBComponent xxx in Globals.ThisWorkbook.VBProject.VBComponents) { Interaction.MsgBox(xxx.Name); Interaction.MsgBox(xxx.ToString); } 因此,所有这些控件都不在.VBComponets ,但是我可以在这个工作簿中find它们作为OLEobjects thisworkbook.worksheets(n).OLEobjects (这与我是thisworkbook.worksheets(n).OLEobjects ,但我可能并不了解系统开始)。 如何处理来自这样的对象的点击操作? 我假设我需要使用Excel.OLEObjectEvents_Event接口,但我似乎无法弄清楚如何。 如果我尝试使用delegates进行自定义事件,我似乎无法将它们分配给OleObjects 。 如果我使用ActionClickEventHandler.CreateDelegate我可以得到各种各样的错误,使我认为这是一个死胡同。 来自MS的官方文档似乎并没有什么帮助,尽pipe它向我介绍了我正在研究的Verb的概念 。 到目前为止,只有“应用程序启动失败”才产生COM错误。 即使只是试图使用两个标准事件之一, .GotFocus ,我总是拉一个0x80040200错误。 例: Excel.OLEObject ButtonCatcher = Globals.ThisWorkbook.Worksheets(1).OLEObjects("CommandButton1"); ButtonCatcher.GotFocus += CommandButton1_Click; 抛出一个Exception from HRESULT: 0x80040200的COMException Exception from HRESULT: 0x80040200在第二行。 该button被启用,这是我从办公室dev站点查找代码后检查。 在包含控件的工作表的代码中尝试更通用的方法 : object CommandButtonStart […]

使用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 […]