如何在没有安装Office或任何第三方依赖项的情况下构建Excel文件?

时间:2016-04-18 17:30:59

标签: c# xml excel oledb

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

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

我能够很好地解析它到.csv文件中,但事实证明选择该文件的代码只查找.xlsx文件。所以尽管我可以在Excel中打开它没问题,但这实际上并没有提供解决方案。

所以,对于我的所有研究,我还没有找到问题的答案“我可以手动构建.xlsx文件吗?”我认为最接近的实际上是使用oledb,但由于电子表格不存在于门外,每次我在下面的代码中进入conn.open();时,都会失败。

我自己创建此文件有简单的方法吗?我知道.xlsx基本上是压缩的XML,但我找不到任何参考,我可以看到我需要在文件中放置哪些标签,然后如何正确压缩它?

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();
            }

2 个答案:

答案 0 :(得分:1)

我不知道你是否考虑过这个第三方,因为它是由微软实现的,但是Open XML SDK for Office可以让你在没有安装Excel的情况下读写xlsx文件。

只需使用NuGet包DocumentFormat.OpenXml将其添加到您的项目中,就不需要安装"安装"有了它,只需确保在部署中包含所需的dll文件。

答案 1 :(得分:1)

您可以将ado.net与OLEDB Excel连接字符串一起使用。

然而,这是非常基本的阅读和写作。

对于我的上一个项目,我使用的是OpenXml 2.5,它是免费的,你可以从微软下载它。 OpenXml将让您完全控制excel。然而,这是一个学习曲线。

另外,你不想使用com互操作。它对于并发导出并不是最佳的,并且由于资源释放问题而总是搞砸了。