我们已经获得的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();
}
答案 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互操作。它对于并发导出并不是最佳的,并且由于资源释放问题而总是搞砸了。