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

本文关键字:文件 转换 xlsx csv excel xls | 更新日期: 2023-09-27 18:02:03

我需要这个代码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文件(xls或xlsx)转换为csv文件

Excel有两种类型:

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

对于较旧的excel格式文件,您应该尝试使用以下格式:

ExcelReaderFactory.CreateBinaryReader(stream);

使用任何xsl到xsl的对话工具。您可以尝试Aspose库。我想它是有授权的,但你可以试试试用版。

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

我是这样做的—OLEDB—获取第一个工作表名称,并删除所有空行。替换//你需要用你的逻辑做的任何事情

    //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。使用以下简单代码将excel文件(如xls或xlsx)转换为csv格式的单元格。

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

注:我是Aspose的开发者布道者