How to create an instance of Excel if Excel is not installed
在我的C应用程序中,在ExcelInterop dll(作为参考)的帮助下,我正在读/写Excel文件。如果我把这个程序移到没有安装Office/Excel的系统上(想想干净的机器),我就会碰到下面的错误。
0由于目标计算机上没有Excel,因此应出现上述错误。
我的问题是,除了在目标计算机上注册interop dll,还有其他方法可以使用我的程序吗?
0
当运行程序的计算机上未安装Excel时,您将询问是否有任何方法可以使用您的程序(该程序使用Excel Interop)。简短的回答是"否"。如果您愿意重构程序以不使用interop,则较长的回答是"是"。
如果目标Excel的版本是2007及更高版本,则可以使用Microsoft提供的OOXML SDK。如果你愿意花点钱的话,你也可以使用第三方库,比如aspose。
在Microsoft文档中可以找到使用ooxml sdk将电子表格插入Excel文件的示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // Given a document name, inserts a new worksheet. public static void InsertWorksheet(string docName) { // Open the document for editing. using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) { // Add a blank WorksheetPart. WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); newWorksheetPart.Worksheet = new Worksheet(new SheetData()); Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart); // Get a unique ID for the new worksheet. uint sheetId = 1; if (sheets.Elements<Sheet>().Count() > 0) { sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; } // Give the new worksheet a name. string sheetName ="Sheet" + sheetId; // Append the new worksheet and associate it with the workbook. Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName }; sheets.Append(sheet); } } |
即使是Microsoft也不建议在服务器上的互操作库中使用。所以最好找到一些替代的框架来为你做Excel。我过去曾成功地使用过NPOI。
我知道这不是你的例外的答案。但老实说,interop是通向无休止麻烦和神秘异常消息的途径。
更新2017:我已经有一段时间没有使用NPOI了,我把所有的项目都转移到了基于OpenXML的EPPLUS insted库中,它创建了现代的XLSX文件。
从我刚才做的所有研究来看,当我需要与服务器上的Excel文件交互时,您必须安装Office。
您可以使用regsrv32注册COM
链接:http://msdn.microsoft.com/en-us/library/ms859484.aspx
您必须在使用前注册您的COM