visual studio read office microsoft manejo leer example descargar create c# excel winforms-interop

c# - studio - Exportación a.xlsx usando Microsoft.Office.Interop.Excel SaveAs Error



microsoft.office.interop.word c# example (4)

Así es como guarda el archivo relevante como un archivo Excel12 (.xlsx) ... No es lo que pensaría intuitivamente, es decir, usando Excel.XlFileFormat.xlExcel12 pero Excel.XlFileFormat.xlOpenXMLWorkbook . El comando real de C # era

excelWorkbook.SaveAs(strFullFilePathNoExt, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value);

Espero que esto ayude a alguien más en el futuro.

Missing.Value se encuentra en el System.Reflection nombres System.Reflection .

Estoy en el proceso de escribir un módulo para exportar un DataTable a Excel usando Microsoft.Office.Interop.Excel pero antes de comenzar en serio quiero que los conceptos básicos funcionen: abrir archivo, guardar como y cerrar.

He logrado abrir y guardar un archivo con la extensión .xls, pero guardar con la extensión .xlsx no funciona. Escribe el archivo .xlsx, pero cuando intento abrirlo, aparece el siguiente error:

Excel no puede abrir el archivo ''SomeFile.xlsx'' porque el formato de archivo no es válido. Verifique que el archivo no se haya dañado y que la extensión del archivo coincida con el formato del archivo.

El código que uso para abrir, guardar y cerrar los archivos es:

Excel.Application excelApplication = new Excel.Application(); //excelApplication.Visible = true; //dynamic excelWorkBook = excelApplication.Workbooks.Add(); Excel.Workbook excelWorkBook = excelApplication.Workbooks.Add(); //Excel.Worksheet wkSheetData = excelWorkBook.ActiveSheet; int rowIndex = 1; int colIndex = 1; excelApplication.Cells[rowIndex, colIndex] = "TextField"; // This works. excelWorkBook.SaveAs("C://MyExcelTestTest.xls", Excel.XlFileFormat.xlWorkbookNormal, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); // This does not!? excelWorkBook.SaveAs("C://MyExcelTestTest.xlsx", Excel.XlFileFormat.xlWorkbookNormal, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); excelWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

También probé el formato de archivo Excel.XlFileFormat.xlExcel12 en lugar de Excel.XlFileFormat.xlWorkbookNormal pero esto ni siquiera escribe arrojando la COMException:

Excepción de HRESULT: 0x800A03EC

Cualquier ayuda para resolver esto sería muy apreciada.

Editar: ahora también he intentado:

excelWorkBook.SaveAs("C://MyExcelTestTest", Excel.XlFileFormat.xlExcel12, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);


Intente cambiar el segundo parámetro en la llamada SaveAs a Excel.XlFileFormat.xlWorkbookDefault.

Cuando lo hice, generé un archivo xlsx que pude abrir con éxito. (Antes de realizar el cambio, podía producir un archivo xlsx, pero no pude abrirlo).

Además, no estoy seguro si importa o no, pero estoy usando la biblioteca de objetos Excel 12.0.


public static void ExportToExcel(DataGridView dgView) { Microsoft.Office.Interop.Excel.Application excelApp = null; try { // instantiating the excel application class excelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook currentWorkbook = excelApp.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel.Worksheet currentWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)currentWorkbook.ActiveSheet; currentWorksheet.Columns.ColumnWidth = 18; if (dgView.Rows.Count > 0) { currentWorksheet.Cells[1, 1] = DateTime.Now.ToString("s"); int i = 1; foreach (DataGridViewColumn dgviewColumn in dgView.Columns) { // Excel work sheet indexing starts with 1 currentWorksheet.Cells[2, i] = dgviewColumn.Name; ++i; } Microsoft.Office.Interop.Excel.Range headerColumnRange = currentWorksheet.get_Range("A2", "G2"); headerColumnRange.Font.Bold = true; headerColumnRange.Font.Color = 0xFF0000; //headerColumnRange.EntireColumn.AutoFit(); int rowIndex = 0; for (rowIndex = 0; rowIndex < dgView.Rows.Count; rowIndex++) { DataGridViewRow dgRow = dgView.Rows[rowIndex]; for (int cellIndex = 0; cellIndex < dgRow.Cells.Count; cellIndex++) { currentWorksheet.Cells[rowIndex + 3, cellIndex + 1] = dgRow.Cells[cellIndex].Value; } } Microsoft.Office.Interop.Excel.Range fullTextRange = currentWorksheet.get_Range("A1", "G" + (rowIndex + 1).ToString()); fullTextRange.WrapText = true; fullTextRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft; } else { string timeStamp = DateTime.Now.ToString("s"); timeStamp = timeStamp.Replace('':'', ''-''); timeStamp = timeStamp.Replace("T", "__"); currentWorksheet.Cells[1, 1] = timeStamp; currentWorksheet.Cells[1, 2] = "No error occured"; } using (SaveFileDialog exportSaveFileDialog = new SaveFileDialog()) { exportSaveFileDialog.Title = "Select Excel File"; exportSaveFileDialog.Filter = "Microsoft Office Excel Workbook(*.xlsx)|*.xlsx"; if (DialogResult.OK == exportSaveFileDialog.ShowDialog()) { string fullFileName = exportSaveFileDialog.FileName; // currentWorkbook.SaveCopyAs(fullFileName); // indicating that we already saved the workbook, otherwise call to Quit() will pop up // the save file dialogue box currentWorkbook.SaveAs(fullFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, System.Reflection.Missing.Value, Missing.Value, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value); currentWorkbook.Saved = true; MessageBox.Show("Error memory exported successfully", "Exported to Excel", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { if (excelApp != null) { excelApp.Quit(); } } }


myBook.Saved = true; myBook.SaveCopyAs(xlsFileName); myBook.Close(null, null, null); myExcel.Workbooks.Close(); myExcel.Quit();