C#在没有Excel的情况下将.xls转换为.csv

时间:2011-09-27 17:53:03

标签: c# asp.net csv

需要在不使用C#/ ASP.net网络应用程序中的Excel的情况下将.xls或.xlsx转换为.csv。该应用程序目前正在使用NPOI.dll的某些功能,但我没有看到关于该特定功能的NPOI的codeplex wiki上的任何信息。有没有人有任何建议?

由于

4 个答案:

答案 0 :(得分:5)

有些库(Excel Data Reader,例如)可以让你阅读excel。一旦能够读取数据,写入csv应该很简单。

答案 1 :(得分:5)

ADODB.NET可用于将Excel文件视为数据源。

//string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;";
string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;";

ConnectionString = string.Format(ConnectionString, @"FullPathToExcelFile");

OleDbConnection conn = new OleDbConnection(ConnectionString);
conn.Open();

OleDbCommand cmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
OleDbDataAdapter oleDBAdapter = new OleDbDataAdapter();
oleDBAdapter.SelectCommand = cmdSelect;

DataSet myDataset = new DataSet();
oleDBAdapter.Fill(myDataset);
conn.Close(); 

// Do whatever with data in myDataset including export to csv...

答案 2 :(得分:3)

查看FileHelpers库。它会完全符合您的要求。

使用FileHelpers,您可以从Excel文件中读取并写入csv或平面文本文件。它是面向对象的!您所要做的就是使用某些属性注释类,以便它们与源excel文件匹配。

考虑这个例子:

[DelimitedRecord("|")]
public class CustomersVerticalBar {
   public string CustomerID;
   public string CompanyName;
   ...
}

阅读使用:

ExcelStorage provider = new ExcelStorage(typeof(CustomersVerticalBar));

provider.StartRow = 3;
provider.StartColumn = 2;

provider.FileName = "Customers.xls";

CustomerVerticalBar[] res = (CustomerVerticalBar[]) provider.ExtractRecords();

从这里取得的例子:http://filehelpers.sourceforge.net/example_exceldatalink.html

答案 3 :(得分:-4)

.xls是一种专有的二进制格式,无法以纯文本格式读取,因此您需要办公室或Libre Office或其他东西来读取... .xlsx是基于xml的格式,并且应该可以通过解析通过DOM ...但你仍然会手动迭代每个值并手动分隔,等等。你考虑过使用xslt吗?