Excel不能从c#生成

我试图存储在c#(SSIS ScriptTask)中生成的Excel中的Datatable。

以下是我的代码:

OleDbDataAdapter A = new OleDbDataAdapter(); System.Data.DataTable dt = new System.Data.DataTable(); A.Fill(dt, Dts.Variables["User::ObjResultSet"].Value); Excel.Application oXL = new Excel.ApplicationClass(); Excel.Workbooks oWBs = oXL.Workbooks; Excel.Workbook oWB = null; Excel.Worksheet oSheet; oWB = oWBs.Count > 0 ? oWB = oWBs[0] : oWBs.Add(System.Reflection.Missing.Value); oXL.DisplayAlerts = false; oWB = oXL.Workbooks.Add(Missing.Value); oSheet = (Excel.Worksheet)oWB.Worksheets[1]; int rowCount = 1; foreach (DataRow dr in dt.Rows) { rowCount += 1; for (int i = 1; i < dt.Columns.Count + 1; i++) { // Add the header time first only if (rowCount == 2) { oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName; } oSheet.Cells[rowCount, i] = dr[i - 1].ToString(); } } oWB.SaveAs(Dts.Variables["User::ExcelPath"].Value, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); oWB.Close(false, Dts.Variables["User::ExcelPath"].Value, Missing.Value); oWBs.Close(); oXL.Quit(); Dts.TaskResult = (int)ScriptResults.Success; 

我面临的问题是,产生了excel。 但是当我尝试生成.xls ,它工作得很好。 但是当我尝试生成.xlsx时,这不起作用。

谁能帮我?

尝试使用Excel.XlFileFormat.xlOpenXMLWorkbook而不是Excel.XlFileFormat.xlWorkbookNormal

[更新]

 oWB.SaveAs(Dts.Variables["User::ExcelPath"].Value, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, Missing.Value, Missing.Value,Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value); 

警告 – 这是纯粹的C#尝试没有SSIS。 这是我以前用过的一种方法,所以根本没有任何好的做法。 如果他们看到的话,其他人应尽可能地加以改进。 这被用来有一个2列的DataTable 。 TimeStamp为1,值为1。 所以你必须适应它,因为你需要它。

 private void createXLSXFromDataTable(System.Data.DataTable table, string path) { MemoryStream ms = new MemoryStream(); using (ExcelPackage package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("data"); worksheet.Cells["A1"].LoadFromDataTable(table,true); worksheet.Column(1).Style.Numberformat.Format = "dd/mm/yyyy\\ hh:mm"; worksheet.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; byte[] excelData = package.GetAsByteArray(); ms.Write(excelData, 0, excelData.Length); } ms.Flush(); using (FileStream fs = File.Create(pfad)) { ms.WriteTo(fs); } //open again with ms office, //so the file will get saved correctly and //all columns have the correct format Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application(); application.Visible = false; Workbooks wbooks = application.Workbooks; wbooks.Open(pfad, Origin: XlPlatform.xlWindows); Workbook wbook = application.ActiveWorkbook; wbook.Save(); //quitting the services, //after that delete/stop COM-connections of each object wbook.Close(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wbook); wbooks.Close(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wbooks); application.Quit(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(application); MessageBox.Show("Document successfully created."); } 

可能是,你必须再次打开Excel文件,并将其保存在您的代码。 至less这个错误发生在我创build我的发布代码的时候,所以这就是为什么我再次在代码中打开文件并保存它。