Tag: c#

到目前为止,使用COM对象的正确方法是什么?

这是一个非常普遍的问题,我决定提出这个问题,因为这个问题可能与今天有不同的答案。 希望这些答案将有助于理解什么是使用COM对象的正确方法。 就个人而言,在对这个问题有不同的看法后,我感到非常困惑。 过去5年来,我曾经使用COM对象,规则对我来说非常清楚: 在代码行中使用单个句点。 使用多个句点在场景后面创build不能被明确释放的临时对象。 不要使用foreach,而是使用for循环,并在每次迭代中释放每个项目 不要调用FInalReleaseComObject,而是使用ReleaseComObject。 不要使用GC释放COM对象。 GC意图主要用于debugging使用情况。 以与创build相反的顺序释放对象。 读完这些最后一行后,你们中的一些人可能会感到沮丧,这就是我如何正确地创build/释放Com Object所知道的,我希望得到的答案能够使它更加清晰和无可争议。 以下是我在这个主题上find的一些链接。 其中一些人告诉说需要调用ReleaseComObject,而其中一些则不是。 如何正确释放Excel COM对象 (2013年11月) 在.NET中释放COM对象的正确方法 (2011年8月) Marshal.ReleaseComObject认为危险 (2010年3月) ReleaseCOMObject (2004年4月) “…在VSTO场景中,你通常不需要使用ReleaseCOMObject …” MSDN – Marshal.ReleaseComObject方法 (当前的.NET Framework版本): “…您应该使用此方法释放包含引用的基础COM对象…” 更新: 这个问题被标记为太宽泛。 按照要求,我会尽量简化并提出更简单的问题。 使用COM对象时是否需要ReleaseComObject或调用GC是正确的方法? VSTO方法是否改变了我们用COM对象的方式? 我写的上面哪个规则是必需的,哪个是错的? 还有别的吗?

用C#连接PowerPivot

是否可以连接到Excel .xlsx文件中的PowerPivot模型? (不在SharePoint网站上托pipe…只是本地文件)。 肯定是的,因为Tableau可以做到这一点。 任何人有任何线索?

exception(HRESULT:0x800AC472)使用Excel.Worksheet.Select时调用Excel.Workbook.SaveAs

我正在打开一个xlsx文件,并将每个工作表保存为一个csv文件。 以下是保存的相关代码: int i=0; foreach (Excel.Worksheet s in app.ActiveWorkbook.Sheets) { s.Select(true); // Error here String outfile = outputpath + "("+i+")" + outputfilename + ".csv"; wkb.SaveAs(outfile, Excel.XlFileFormat.xlCSVMSDOS); ++i; } 输出文件名或path没有问题,并且输出文件不存在。 它保存了前两张,然后崩溃。 我试着用4张不同的input文件,它完美的工作,所以它与input文件。 例外 : System.Runtime.InteropServices.COMException was unhandled HResult=-2146777998 Message=Exception from HRESULT: 0x800AC472 Source=ExcelXlsx2Csv ErrorCode=-2146777998 StackTrace: at Microsoft.Office.Interop.Excel._Worksheet.Select(Object Replace) at ExcelXlsx2Csv.Program.Main(String[] args) in c:\Users\Edward\Documents\Visual Studio 2013\Projects\ExcelXlsx2Csv\ExcelXlsx2Csv\Program.cs:line 109 […]

Excel VSTO如何工作?

Excel VSTO如何工作? 如果我在Visual Studio 2005中创build一个Excel工作簿解决scheme,那么我可以愉快地代码完全访问Excel对象模型,甚至将Excel工作表视为devise表面。 当我构build解决scheme时,我得到一个.XLS文件和一个.DLL (包含我的C#代码)。 我现在可以通过双击.XLS来启动Excel工作表,我的工作表可以使用我所有的C#代码以及我在工作表上放置的任何控件。 工作表如何引用.DLL ? Excel工作簿/工作表的哪一部分告诉它需要启动CLR并托pipe我的程序集?

以编程方式将Excel 2003文件转换为2007+

我正在寻找一种方法来实质上采取旧文件扩展名为.xls的Excel文件的文件夹,并将其转换为.xlsm。 我意识到你可以自己进入Excel工作表并手动执行,但无论如何,它有代码吗? 具体使用任何types的库?

尝试使用EPPlus读取Excel文件在服务器上工作,但不能通过浏览器

当我发布我的项目,并在服务器上运行它,它的工作。 EPPlus发现所有4个工作表,通过它们迭代,并将我的数据上传到SQL。 但是当我通过浏览器或我的同事浏览器运行时,它显示0个工作表。 任何想法,为什么这可能会发生? 这一点上的代码没有太多,但是这里有一部分: using (ExcelPackage package = new ExcelPackage(new FileInfo(strFile))) { if (package.Workbook.Worksheets.Count <= 0) strError = "Your Excel file does not contain any work sheets"; else { foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets) {

如何在closedXml c#中禁用自动filter?

我在closedXML库中遇到了一个奇怪的问题。 我正在使用closedXML库将数据表导出到.xlsx(excel文件)。 默认情况下,库中启用了自动筛选器。 我想禁用或删除自动filter,只导出数据表。 这是我尝试的代码,但它不工作 XLWorkbook wb = new XLWorkbook(); var ws = wb.Worksheets.Add("Test"); ws.Cell(1, 1).InsertTable(dataTable); ws.AutoFilter.Enabled = false; ws.Columns().AdjustToContents(); wb.SaveAs("Report.xlsx"); 我也试过了 ws.AutoFilter.Clear(); 即使明智的明确filter不工作 ws.AutoFilter.Column(1).Clear();

如何使用C#和SDK获取OOXML中的“第一”表单?

所以! :)简单的问题 – 这可能是问,但我找不到它。 我正在使用Open XML SDK和C#从XLSX中检索数据。 我想获得“第一”表(如第一个你会看到在Excel中),但是当我使用… WorkbookPart wbPart = workBook.WorkbookPart; //Now let's find the dimension of the first worksheet string sheetArea = wbPart.WorksheetParts.First().Worksheet.SheetDimension.Reference.Value; 不幸的是,在一个全新的XLSX中,这个“Sheet3”取代了“Sheet1”。 我不能提前知道工作表名称,也不能强制用户仅提交一张工作表或指定工作表名称。 我目前的要求是抓住第一张纸。 有人可以帮忙吗? 🙂 编辑:我想通了! 但我不能回答我自己的问题7个小时,所以… 我通过挖掘其他SO问题的答案find了这个: Open XML SDK 2.0 – 如何更新电子表格中的单元格? 实质上,一个可行的例子可能是这样的: (wbPart.GetPartById(wbPart.Workbook.Sheets.Elements<Sheet>().First().Id.Value) as WorksheetPart).Worksheet.SheetDimension.Reference.Value

c#excel如何改变特定行的颜色

我想问你们,如果单元格1不为空,如何在Excel表格中将行的颜色更改为红色。 XX YY ZZ —————– aa bb cc aa1 bb1 cc1 aa2 cc2 aa3 bb3 cc3 aa4 Excel.Application xlApp; Excel. Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; 我非常感谢

如何在Excel文件c#中创build一个新的工作表?

我需要创build一个非常大的Excel文件,但一个工作表中的Excel文件最多可以包含65k行。 所以,我想把我所有的信息分成几个dynamic的工作表。 这是我的近似代码 //——————Create Excel App——————– Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(numberOfLetters); foreach (string letter in letters) { xlWorkSheet.Cells[rowIndex, 1] = letter; rowIndex++; } xlWorkBook.SaveAs(pathXL, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); 如何在我的foreach循环中添加新的工作表,并使用一些条件为工作表命名(哪个用户可以在列表中的页面底部的Excel中看到)? […]