关于C#:如何在不安装Office或任何第三方依赖项的情况下构建Excel文件?

How can I build an Excel file without Office or any 3rd party dependencies installed?

本问题已经有最佳答案,请猛点这里访问。

Windows窗体应用程序(C),我们已经基于.xlsx文件导入了文件。我的任务是写一个新的部分,自动生成电子表格。为它创建数据很容易(并且已经完成)。我有创建电子表格所需的任何额外信息,除了…

他们在11点告诉我,服务器上没有安装Microsoft Office,所以Microsoft.Office.Interop等不是解决方案。我同时发现目标是在最小的影响下做到这一点…因此,如果我可以避免添加任何引用,那就更好了;听起来在服务器上安装任何东西都不是一个选项。

我可以很好地将它解析成.csv文件,但选择该文件的代码只查找.xlsx文件。所以尽管我可以在Excel中打开它,但这并不能提供真正的解决方案。

因此,对于我所有的研究,我都没有找到一个问题的答案:"我可以手动构建一个.xlsx文件吗?"我认为我得到的最接近实际使用的是OLEDB,但是由于电子表格不存在于门外,所以每次我到达下面代码中的conn.open();时,它都失败了。

有什么简单的方法可以让我自己创建这个文件吗?我知道.xlsx基本上是压缩的XML,但是我找不到任何引用,在那里我可以看到我需要在文件中放置哪些标记,然后如何正确地压缩它?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string cnStr ="Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" +     filePathAndName +";Persist Security Info=True;";
            using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(cnStr))
            {
                conn.Open();
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
                cmd.CommandText ="CREATE TABLE [" + worksheetCategory +"] (SKU VARCHAR, FileName VARCHAR);";
                cmd.ExecuteNonQuery();

                foreach (string f in files)
                {
                    string shortProductName = f.Substring(f.LastIndexOf("\") + 1);
                    shortProductName = shortProductName.Substring(0, shortProductName.IndexOf("
_"));
                    cmd.CommandText ="
INSERT INTO [" + worksheetCategory +"](SKU, FileName) VALUES(" + shortProductName +"," + f +");";
                    cmd.ExecuteNonQuery();
                }
                conn.Close();
            }


可以将ADO.NET与OLEDB Excel连接字符串一起使用。

不过,这是非常基本的阅读和写作。

在上一个项目中,我使用了OpenXML 2.5,它是免费的,您可以从Microsoft下载它。OpenXML将为您提供对Excel的完全控制。然而,有一个学习曲线。

另外,您不想使用COM互操作。它不是并发导出的最佳选择,而且总是因为资源分配问题而出错。


我不知道您是否考虑第三方,因为它是由Microsoft实现的,但是开放式XML SDK for Office将允许您在没有在计算机上安装Excel的情况下读取和写入XLSX文件。

只需使用nuget package documentformat.openxml将其添加到项目中,不需要"安装"任何内容,只需确保在部署中包含所需的dll文件即可。