关于c#:如果未安装Excel,如何创建Excel实例

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