将excel文件(xls或xlsx)转换为csv文件

我需要这个代码C#工作的文件Excel 2003和2007版本。

我不能得到这个C#代码工作转换Excel文件(xls)在CSV文件。

如果尝试使用excel文件扩展名xlsx这一切都可以,但如果尝试使用扩展名xls我在这一行中有错误:

 result.Tables[0].TableName.ToString(); 

我的代码在下面,怎么了?

代码隐藏

 FileUploadControl.SaveAs(Server.MapPath("/public/") + filename); System.IO.FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); Excel.IExcelDataReader excelReader = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream); DataSet result = excelReader.AsDataSet(); excelReader.Close(); result.Tables[0].TableName.ToString(); string csvData = ""; int row_no = 0; int ind = 0; while (row_no < result.Tables[ind].Rows.Count) { for (int i = 0; i < result.Tables[ind].Columns.Count; i++) { csvData += result.Tables[ind].Rows[row_no][i].ToString() + ","; } row_no++; csvData += "\n"; } keys = GetUniqueKey(8).ToUpper(); output = System.Web.HttpContext.Current.Server.MapPath("/public/target_" + keys.ToString() + ".csv"); StreamWriter csv = new StreamWriter(@output, false); csv.Write(csvData); csv.Close(); 

Excel可以有两种types:

  1. 二进制 – Excel 2003及更早版本 – xls
  2. Zip – 基于Open Office XML标准 – Excel 2007起 – xlsx

您应该尝试使用以下的旧版Excel格式文件:

 ExcelReaderFactory.CreateBinaryReader(stream); 

使用任何Xls到Xslx对话工具。 你可以试试Aspose库。 我认为它是许可的,但你可以尝试线索版本。

您可以使用这些库进行所有其他转换。

这是我怎么做 – OLEDB – 获取第一个表名称,并删除所有空行。 把你的逻辑replace成你需要做的任何事情。

  //Your Method signature { //create connection string var connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; //process using (var conn = new OleDbConnection(connStr)) { conn.Open(); //programatically get the first sheet, whatever it is named. var sheetName = GetSheetNames(conn)[0].SheetNameOf; var adapter = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", sheetName), connStr); var ds = new DataSet(); adapter.Fill(ds, "anyNameHere"); var data = ds.Tables["anyNameHere"]; //copy and remove blank lines var resData = data.Clone(); var filteredData = data.Rows.Cast<DataRow>().Where( row => !row.ItemArray.All( field => field is DBNull || field == null || (String.IsNullOrEmpty(field.ToString().Trim()))) ); filteredData.CopyToDataTable(resData, LoadOption.OverwriteChanges); var newData = resData.AsEnumerable(); //whatever you need to do } public List<SheetName> GetSheetNames(OleDbConnection conn) { if (conn.State != ConnectionState.Open) { conn.Open(); } DataTable excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); var sheetNames = (from DataRow row in excelSchema.Rows where !row["TABLE_NAME"].ToString().Contains("FilterDatabase") select new SheetName { SheetNameOf = row["TABLE_NAME"].ToString() } ).ToList(); conn.Close(); return sheetNames; } 

您可以使用Aspose.Cells将以下简单代码转换为csv格式,如xls或xlsx等excel文件。

 string filePath = @"F:\Downloads\source.xlsx"; Workbook workbook = new Workbook(filePath); workbook.Save("output.csv", SaveFormat.CSV); 

注意:我在Aspose作为开发者传道人。