保存excel文件中的数据 –

我有一个小应用程序,最终用户可以将结果保存在Excel文件中。 一切看起来不错,但是在Microsoft Windows通信出现几秒之后:“程序Microsoft Office Excel停止工作”。 好的,就这样吧。

如果用户将数据保存为* .xls文件,则打开此文件没有问题 – 保存在此文件中的数据是正确的。

如果用户将数据保存为* .xlsx文件,则是一个问题。 当我尝试打开此文件时,显示消息:“程序Microsoft Excel无法打开文件* .xlsx,因为文件格式或扩展名不正确,请检查文件是否损坏,如果文件扩展名正确, 。

我用来将数据保存为excel文件的代码如下:

public void SaveData(ExcelWriter ew) { SaveFileDialog saveFD = new SaveFileDialog(); saveFD.InitialDirectory = "C:\\users\\Documents"; saveFD.FileName = this._saveExcelFileName; saveFD.Filter = "excel 97-03(*.xls)|*.xls|excel 2007 (*.xlsx)|*.xlsx"; saveFD.FilterIndex = 2; saveFD.RestoreDirectory = true; if (saveFD.ShowDialog() == DialogResult.OK) { try { this._saveExcelFileName = saveFD.FileName; ew.RunExcelWriter(_dt, _saveExcelFileName); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } public void RunExcelWriter(DataTable DataT, string fileName) { StartExcel(); GetANewWorkbook(); GetTheActiveSheet(); ProcessTheDataTable(DataT); SaveTheSheet(fileName); Clean(); } private void StartExcel() { // Start Excel and get Application object. oXL = new Excel.Application(); // Set some properties oXL.Visible = true; oXL.DisplayAlerts = false; } private void GetANewWorkbook() { // Get a new workbook. oWB = oXL.Workbooks.Add(Missing.Value); } private void GetTheActiveSheet() { oSheet = (Excel.Worksheet)oWB.ActiveSheet; oSheet.Name= "Wyniki"; } private void ProcessTheDataTable(DataTable DT) { int rowCount = 1; foreach (DataRow dr in DT.Rows) { rowCount += 1; for (int i = 1; i < DT.Columns.Count + 1; i++) { // Add the header the first time through if (rowCount == 2) { oSheet.Cells[1, i] = DT.Columns[i - 1].ColumnName; } oSheet.Cells[rowCount, i] = dr[i - 1].ToString(); } } // Resize the columns oRange = oSheet.get_Range(oSheet.Cells[1, 1], oSheet.Cells[rowCount, DT.Columns.Count]); oRange.EntireColumn.AutoFit(); //oRange.Style = oSheet.Cells.Style; } private void SaveTheSheet(string FN) { oSheet = null; oRange = null; oWB.SaveAs(FN, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); if(oWB.Saved==true) { MessageBox.Show("Plik został zapisany pomyślnie"); } else { MessageBox.Show("PLIKU NIE ZAPISANO"); } oWB.Close(Missing.Value, Missing.Value, Missing.Value); oWB = null; oXL.Quit(); } 

如果有人知道这是为什么? 提前谢谢了

更新1:

build议的答案不起作用。 我更改为以下内容:

 private void SaveTheSheet(string FN) { oSheet = null; oRange = null; oWB.SaveAs(FN, Excel.XlFileFormat.xlXMLSpreadsheet, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); if(oWB.Saved==true) { MessageBox.Show("Plik został zapisany pomyślnie"); } else { MessageBox.Show("PLIKU NIE ZAPISANO"); } oWB.Close(Missing.Value, Missing.Value, Missing.Value); oWB = null; oXL.Quit(); } 

现在当我保存时,有一个问题:

“来自HRESULT的exception:0x800A03EC

更新2:

我昨天努力了一下,并且在将数据写入.xlsx格式时我设法达到了预期的效果。 当保存到.xls我仍然得到Microsoft Windows消息closuresExcel应用程序,但至less(在另一个警告批准后),我可以打开这个文件。 下面的代码,我正在使用保存为.xlsx格式:

 oWB.SaveAs(FN, Excel.XlFileFormat.xlWorkbookDefault, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 

这里是.xls

  oWB.SaveAs(FN, Excel.XlFileFormat.xlXMLSpreadsheet, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 

请 – 任何build议是重要的。

在我的情况下工作Excel.XlFileFormat.xlWorkbookDefaultExcel.XlFileFormat.xlOpenXMLWorkbook

  oWB.SaveAs(fileName, Excel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 

要么

  oWB.SaveAs(fileName, Excel.XlFileFormat.xlWorkbookDefault, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 

保存为.xslx时,请尝试使用Excel.xlXMLSpreadsheet而不是Excel.XlFileFormat.xlWorkbookNormal