c# asp.net

c# - Cómo escribir algunos datos en un archivo de Excel(.xlsx)



asp.net (5)

Es posible escribir en un archivo Excel sin abrirlo usando Microsoft.Jet.OLEDB.4.0 y OleDb . Usando OleDb , se comporta como si estuviera escribiendo en una tabla usando sql.

Aquí está el código que utilicé para crear y escribir en un nuevo archivo de Excel. No se necesitan referencias adicionales

var connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/SomePath/ExcelWorkBook.xls;Extended Properties=Excel 8.0"; using (var excelConnection = new OleDbConnection(connectionString)) { // The excel file does not need to exist, opening the connection will create the // excel file for you if (excelConnection.State != ConnectionState.Open) { excelConnection.Open(); } // data is an object so it works with DBNull.Value object propertyOneValue = "cool!"; object propertyTwoValue = "testing"; var sqlText = "CREATE TABLE YourTableNameHere ([PropertyOne] VARCHAR(100), [PropertyTwo] INT)"; // Executing this command will create the worksheet inside of the workbook // the table name will be the new worksheet name using (var command = new OleDbCommand(sqlText, excelConnection)) { command.ExecuteNonQuery(); } // Add (insert) data to the worksheet var commandText = $"Insert Into YourTableNameHere ([PropertyOne], [PropertyTwo]) Values (@PropertyOne, @PropertyTwo)"; using (var command = new OleDbCommand(commandText, excelConnection)) { // We need to allow for nulls just like we would with // sql, if your data is null a DBNull.Value should be used // instead of null command.Parameters.AddWithValue("@PropertyOne", propertyOneValue ?? DBNull.Value); command.Parameters.AddWithValue("@PropertyTwo", propertyTwoValue ?? DBNull.Value); command.ExecuteNonQuery(); } }

Esto es lo que estoy tratando de hacer.

1.Crear archivo Excel (.xlsx) c: //test/files/work1_4.13.14.xlsx con nombre + valor (fecha)

ejemplo: work1_4.13.14.xlsx

2. Establezca los encabezados en el ejemplo del archivo: [Nombre] [Edad] [Ciudad].

3. Tengo 3 Lista con nombres, edades, ciudad que necesito completar en la hoja de Excel.

Este es mi objetivo

Name Age City Ben 20 xyz Jack 25 xyz Mike 45 zyx

¿Algunas ideas?


Espero que aquí sea exactamente lo que estamos buscando.

private void button2_Click(object sender, RoutedEventArgs e) { UpdateExcel("Sheet3", 4, 7, "Namachi@gmail"); } private void UpdateExcel(string sheetName, int row, int col, string data) { Microsoft.Office.Interop.Excel.Application oXL = null; Microsoft.Office.Interop.Excel._Workbook oWB = null; Microsoft.Office.Interop.Excel._Worksheet oSheet = null; try { oXL = new Microsoft.Office.Interop.Excel.Application(); oWB = oXL.Workbooks.Open("d://MyExcel.xlsx"); oSheet = String.IsNullOrEmpty(sheetName) ? (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet : (Microsoft.Office.Interop.Excel._Worksheet)oWB.Worksheets[sheetName]; oSheet.Cells[row, col] = data; oWB.Save(); MessageBox.Show("Done!"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { if (oWB != null) oWB.Close(); } }


Prueba este codigo

Microsoft.Office.Interop.Excel.Application oXL; Microsoft.Office.Interop.Excel._Workbook oWB; Microsoft.Office.Interop.Excel._Worksheet oSheet; Microsoft.Office.Interop.Excel.Range oRng; object misvalue = System.Reflection.Missing.Value; try { //Start Excel and get Application object. oXL = new Microsoft.Office.Interop.Excel.Application(); oXL.Visible = true; //Get a new workbook. oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add("")); oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet; //Add table headers going cell by cell. oSheet.Cells[1, 1] = "First Name"; oSheet.Cells[1, 2] = "Last Name"; oSheet.Cells[1, 3] = "Full Name"; oSheet.Cells[1, 4] = "Salary"; //Format A1:D1 as bold, vertical alignment = center. oSheet.get_Range("A1", "D1").Font.Bold = true; oSheet.get_Range("A1", "D1").VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; // Create an array to multiple values at once. string[,] saNames = new string[5, 2]; saNames[0, 0] = "John"; saNames[0, 1] = "Smith"; saNames[1, 0] = "Tom"; saNames[4, 1] = "Johnson"; //Fill A2:B6 with an array of values (First and Last Names). oSheet.get_Range("A2", "B6").Value2 = saNames; //Fill C2:C6 with a relative formula (=A2 & " " & B2). oRng = oSheet.get_Range("C2", "C6"); oRng.Formula = "=A2 & /" /" & B2"; //Fill D2:D6 with a formula(=RAND()*100000) and apply format. oRng = oSheet.get_Range("D2", "D6"); oRng.Formula = "=RAND()*100000"; oRng.NumberFormat = "$0.00"; //AutoFit columns A:D. oRng = oSheet.get_Range("A1", "D1"); oRng.EntireColumn.AutoFit(); oXL.Visible = false; oXL.UserControl = false; oWB.SaveAs("c://test//test505.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); oWB.Close(); //...


Puedes usar ClosedXML para esto.

Almacene su tabla en un DataTable y puede exportar la tabla a Excel con este simple fragmento de código:

XLWorkbook workbook = new XLWorkbook(); DataTable table = GetYourTable(); workbook.Worksheets.Add(table );

Puede leer la documentación de ClosedXML para obtener más información. ¡Espero que esto ayude!


solo sigue los pasos a continuación:

// Inicie Excel y obtenga el objeto Aplicación.

oXL = new Microsoft.Office.Interop.Excel.Application(); oXL.Visible = false;