【问题标题】:The file you are trying to open is in a different format then specified by the file extension您尝试打开的文件与文件扩展名指定的格式不同
【发布时间】:2021-11-09 15:57:07
【问题描述】:

尝试在 Excel 中打开 csv 文件时出现 C# 错误。您尝试打开的文件与文件扩展名指定的格式不同。

代码如下:

private void BtnExportExcel_Click(object sender, EventArgs e)
{
    string[] data = rtbConvData.Text.Split('\n');

    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "CSV (Comma delimited)(*.csv)|*.csv";
    //sfd.FileName = "Data Conversion " + System.DateTime.Now.ToString("MM_dd_yyyy");
    sfd.FileName = lblFileName.Text;

    if (sfd.ShowDialog() == DialogResult.OK)
    {
        object misValue = System.Reflection.Missing.Value;
        Microsoft.Office.Interop.Excel.Application xlexcel = new Microsoft.Office.Interop.Excel.Application();

        xlexcel.DisplayAlerts = false;
        Workbook xlWorkBook = xlexcel.Workbooks.Add(misValue);
        Worksheet xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1);

        for (int i = 1; i < data.Length; i++)
        {
            xlWorkSheet.Cells[i, 1] = data[i - 1];
        }

        // Save the excel file under the captured location from the SaveFileDialog
        xlWorkBook.SaveAs(sfd.FileName, XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlexcel.DisplayAlerts = true;
        xlWorkBook.Close(true, misValue, misValue);
        xlexcel.Quit();

        ReleaseObject(xlWorkSheet);
        ReleaseObject(xlWorkBook);
        ReleaseObject(xlexcel);
    }
}

【问题讨论】:

  • 看起来您正在将其保存为 CSV,但制作的是 XLSX 文件。如果您需要 CSV,请执行此操作,不要使用 Excel。
  • Excel 的原生格式不是 CSV! 如果你在 Excel 正常保存的文件上加上 csv 扩展名,它会混淆大多数软件,包括 Excel。
  • @JoelCoehoorn 您的代码将 Excel 文件保存为 Excel (XlFileFormat.xlWorkbookNormal),扩展名错误。这段代码意义不大。如果要保存 CSV 文件,为什么还要使用 Excel? CSV 是一个普通的旧文本文件,没有表格、单元格等。您可以轻松地将逗号分隔的值写入文本文件,或者在必要时使用 CsvHelper 之类的库来处理转义
  • 另一方面,如果你想创建一个 Excel 文件不要.csv 扩展名保存它。您也不需要 Excel 来创建 Excel 文件,您可以使用 Epplus 或 ClosedXML 等库

标签: c# excel csv file-format


【解决方案1】:

当你有一个Comma-Separated Values(CSV)扩展名的文件时,那么文件的格式有一些预期的规则,大致如下:

  • 每一行代表一行
  • 行由delimiter/分隔符分隔
  • 由分隔符分隔的值代表行中的单元格

当尝试解析 csv 文件时,假定存在此类规则。无论何种技术负责解析这样的文件,要么有一个验证器来检查“文件是否看起来不错”,要么假设它确实如此。如果文件不符合预期,则可能会出现错误。因此,如果可能,您应该以某种方式将文件转换为 csv。如果不是,则检测文件格式是什么并使用适当的解析器进行解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多