C# 如何修复文件格式和扩展名don';不匹配?

C# 如何修复文件格式和扩展名don';不匹配?,c#,excel,C#,Excel,我在c#中创建了一个代码,用于创建和保存excel文件。代码可以成功创建和保存excel文件,但当我打开创建的excel文件时,它会显示一条警告消息,告知: “filename.xls”的文件格式和扩展名不匹配。文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你还是要打开它吗 我正在使用以下代码: private void button1_Click(object sender, EventArgs e) { saveFileDialogSummary.Fil

我在c#中创建了一个代码,用于创建和保存excel文件。代码可以成功创建和保存excel文件,但当我打开创建的excel文件时,它会显示一条警告消息,告知:

“filename.xls”的文件格式和扩展名不匹配。文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你还是要打开它吗

我正在使用以下代码:

private void button1_Click(object sender, EventArgs e)
    {
        saveFileDialogSummary.Filter = "Excel Flie|*.xls";
        saveFileDialogSummary.FilterIndex = 0;
        saveFileDialogSummary.RestoreDirectory = true;
        saveFileDialogSummary.CreatePrompt = true;
        saveFileDialogSummary.Title = "Export Excel File To";

        Excel.Application ExcelApp = new Excel.Application();
        ExcelApp.Application.Workbooks.Add(Type.Missing);
        ExcelApp.Columns.ColumnWidth = 30;
        for (int i = 0; i < dataGridViewSummary.Rows.Count; i++)
        {
            DataGridViewRow row = dataGridViewSummary.Rows[i];
            for (int j = 0; j < row.Cells.Count; j++)
            {
                ExcelApp.Cells[i + 1, j + 1] = row.Cells[j].ToString();
            }
        }

        DialogResult res = saveFileDialogSummary.ShowDialog();
        if(res == DialogResult.OK){
            ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialogSummary.FileName);
            ExcelApp.ActiveWorkbook.Saved = true;
            ExcelApp.Quit();
        }
    }
private void按钮1\u单击(对象发送者,事件参数e)
{
saveFileDialogSummary.Filter=“Excel Flie |*.xls”;
saveFileDialogSummary.FilterIndex=0;
saveFileDialogSummary.RestoreDirectory=true;
saveFileDialogSummary.CreatePrompt=true;
saveFileDialogSummary.Title=“将Excel文件导出到”;
Excel.Application ExcelApp=新的Excel.Application();
ExcelApp.Application.Workbooks.Add(Type.Missing);
ExcelApp.Columns.ColumnWidth=30;
对于(int i=0;i

如何避免收到警告信息?

如果安装了最新的office,只需将.xls更改为.xlsx即可。

我知道这个问题现在可能已经解决了,但是,在不修改代码的情况下尝试帮助您,仍然可以在您的中使用.xls格式,并通过设置注册表在打开文件时抑制此警告。 打开注册表编辑,导航至
HKEY\U CURRENT\U USER\Software\Microsoft\Office\14\Excel\Security

创建一个名为
extensionharding
DWord
,并将该值设置为0

这可能会使您的系统易受攻击,但在组织网络中工作时,这并不是什么大问题,至少在您确信下载了文档类型和源的情况下是如此。

解决“文件格式和扩展名不匹配”的方法是在对文件进行了所有必要的编写之后,最后关闭工作簿**($workbook->close;)**


我在从邮件中打开“XLS”文件时遇到了同样的问题。我创建了一个文件并将我所有的东西都插入了init,在不关闭工作簿的情况下,我将邮件作为附件发送。后来我意识到必须关闭工作簿并作为附件发送。

文件扩展名.xls和.xlsx包含不同的布局。扩展名.xls在版本2003中使用,而随后将使用版本.xlsx扩展名。
您必须将excel文件导出为.xlsx格式。它将支持我使用的所有版本

将以下DLL添加到bin文件夹中
1.ClosedXML.dll
2.DocumentFormat.OpenXml.dll

要导出到.xlsx的代码


您可以只使用
CSV
格式吗?每种风格的EXCEL文件都有FormatCode值-使用这些值,您就不必担心客户端安装了哪个版本。这是什么:
ExcelApp.Application.Workbooks.Add(Type.Missing)?是的。使用15和16也可以。谢谢这是否也适用于16 64位版本?我试过了,没用,对我有用!我使用32位Excel。干得好
    DataTable dt = new DataTable(); 
    //Create column and inser rows
    using (XLWorkbook wb = new XLWorkbook())
    {         
                var ws = wb.Worksheets.Add(dt, Sheetname);
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
     }