2015-02-09 88 views
6

我在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(); 
     } 
    } 

我应该怎么做才能避免接收到该警告消息?

+0

可你刚才使用CSV格式? – chouaib 2015-02-09 05:59:43

+1

EXCEL文件的每种风格都有FormatCode值 - 使用这些值,您不必担心客户端安装了哪个版本。 – 2015-02-09 06:16:02

+0

这是什么:'ExcelApp.Application.Workbooks.Add(Type.Missing);'? – DrKoch 2015-02-09 06:34:14

回答

1

我知道这个问题现在可以解决,但只是试图帮助你而不修改代码仍然可以在你的使用.xls格式,并通过设置注册表打开文件时禁止此警告。 打开REG编辑,浏览到HKEY_CURRENT_USER\Software\Microsoft\Office\14\Excel\Security

创建名为ExtensionHardening一个DWord并将其值设置为0。

这可能让你的系统脆弱,但在组织网络工作时,它不是一个大问题,在至少当你确定下载文件和来源的类型时。

0

“文件格式和扩展名不匹配”的解决方案是关闭工作簿**($ workbook-> close;)**,最后在完成所有必要的文件写入之后。

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

0

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

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

代码导出为原来的.xlsx

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(); 
       } 
    }