Excel не открывается, сгенерированный с помощью c #

Я пытаюсь сохранить Datatable в excel, который сгенерирован в c # (SSIS ScriptTask).

Ниже мой код:

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. Вот такой подход, который я использовал некоторое время назад, поэтому, вероятно, он вообще не имеет никакой хорошей практики. Другие должны, если это возможно, уточнить, если они это видят. Для этого использовался DataTable с двумя столбцами. 1 для TimeStamp и 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 и сохранить его в своем коде. По крайней мере, эта ошибка произошла со мной во время создания моего опубликованного кода, поэтому я снова открыл файл в коде и сохранил его.

  • Импорт большого файла excel с использованием диспетчера соединений excel в SSIS
  • Не удалось изменить тип данных столбца целевого столбца SSIS Excel
  • CSV не создает проблемы с форматом с целым значением при создании через пакет SSIS
  • Не удалось прочитать файл excel с использованием сценария SIS Script
  • SSIS Import Excel с использованием IMEX = 1 FirstRowhasColumnName возвращается к True
  • SSIS. Импорт нескольких файлов xlsx
  • SSIS: как проверить, нет ли записи в плоском файле, но существует в базе данных
  • Спецификатор динамического текста
  • Соединение Excel не может найти таблицы, если документ не открыт
  • Удалите несколько столбцов, переустановите оставшиеся столбцы и переместите обработанные файлы для нескольких CSV-файлов с помощью SSIS 2008 R2
  • SSIS: добавьте несколько файлов Excel с одинаковым форматом, но с другим именем файла в несколько мест назначения таблицы базы данных на основе имени файла Excel.
  • Давайте будем гением компьютера.