una texto hoja formato desde dar combinar columna celdas c# excel export-to-excel

texto - dar formato a una hoja de excel desde c#



¿Formatea una columna de Excel(o una celda) como Texto en C#? (8)

A continuación se muestra un código para formatear las columnas A y C como texto en SpreadsheetGear para .NET que tiene una API que es similar a Excel, excepto por el hecho de que SpreadsheetGear con frecuencia se tipea con más fuerza. No debería ser demasiado difícil descubrir cómo convertir esto para trabajar con Excel / COM:

IWorkbook workbook = Factory.GetWorkbook(); IRange cells = workbook.Worksheets[0].Cells; // Format column A as text. cells["A:A"].NumberFormat = "@"; // Set A2 to text with a leading ''0''. cells["A2"].Value = "01234567890123456789"; // Format column C as text (SpreadsheetGear uses 0 based indexes - Excel uses 1 based indexes). cells[0, 2].EntireColumn.NumberFormat = "@"; // Set C3 to text with a leading ''0''. cells[2, 2].Value = "01234567890123456789"; workbook.SaveAs(@"c:/tmp/TextFormat.xlsx", FileFormat.OpenXMLWorkbook);

Descargo de responsabilidad: soy dueño de SpreadsheetGear LLC

Estoy perdiendo los ceros a la izquierda cuando copio valores de una tabla de datos en una hoja de Excel. Eso es porque probablemente Excel trate los valores como un número en lugar de texto.

Creé la hoja de trabajo en C # y estoy copiando los valores de esta manera:

myWorksheet.Cells[i + 2, j] = dtCustomers.Rows[i][j - 1].ToString();

¿Cómo formateo una columna completa o cada celda como texto? Una pregunta relacionada, ¿cómo lanzar myWorksheet.Cells[i + 2, j] para mostrar una propiedad de estilo en Intellisense?


Antes de escribir en Excel necesita cambiar el formato:

xlApp = New Excel.Application xlWorkSheet = xlWorkBook.Sheets("Sheet1") Dim cells As Excel.Range = xlWorkSheet.Cells ''set each cell''s format to Text cells.NumberFormat = "@" ''reset horizontal alignment to the right cells.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight


Recientemente también he luchado con este problema y he aprendido dos cosas sobre las sugerencias anteriores.

  1. Establecer el número de formato en @ hace que Excel alinee a la izquierda el valor, y lo lea como si fuera texto, sin embargo, aún trunca el cero inicial.
  2. Agregar un apóstrofo al principio hace que Excel lo trate como texto y retiene el cero, y luego aplica el formato de texto predeterminado, resolviendo ambos problemas.

El aspecto engañoso de esto es que ahora tiene un valor diferente en la celda. Afortunadamente, al copiar / pegar o exportar a CSV, el apóstrofo no está incluido.

Conclusión: utilice el apóstrofo, no el número de formato para retener los ceros a la izquierda.


Si establece el formato de celda en Texto antes de agregar un valor numérico con un cero inicial, el cero inicial se conserva sin tener que sesgar los resultados al agregar un apóstrofo. Si intenta y agrega manualmente un valor cero inicial a una hoja predeterminada en Excel y luego lo convierte en texto, se elimina el cero inicial. Si convierte la celda a Texto primero, luego agregue su valor, está bien. El mismo principio se aplica al hacerlo programáticamente.

// Pull in all the cells of the worksheet Range cells = xlWorkBook.Worksheets[1].Cells; // set each cell''s format to Text cells.NumberFormat = "@"; // reset horizontal alignment to the right cells.HorizontalAlignment = XlHAlign.xlHAlignRight; // now add values to the worksheet for (i = 0; i <= dataGridView1.RowCount - 1; i++) { for (j = 0; j <= dataGridView1.ColumnCount - 1; j++) { DataGridViewCell cell = dataGridView1[j, i]; xlWorkSheet.Cells[i + 1, j + 1] = cell.Value.ToString(); } }


Solución que funcionó para Excel Interop:

myWorksheet.Columns[j].NumberFormat = "@"; // column as a text myWorksheet.Cells[i + 2, j].NumberFormat = "@"; // cell as a text

Este código debería ejecutarse antes de poner datos en Excel. Los números de columnas y filas están basados ​​en 1.

Un poco más detalles. Mientras que la respuesta aceptada con referencia para SpreadsheetGear parece casi correcta, tenía dos preocupaciones al respecto:

  1. No estoy usando SpreadsheetGear. Me interesaba la comunicación regular de Excel a través de interoperabilidad de Excel sin ninguna biblioteca de terceros,
  2. Estaba buscando la forma de formatear columna por número, sin usar rangos como "A: A".

Use su WorkSheet.Columns.NumberFormat , y WorkSheet.Columns.NumberFormat en la string "@" , aquí está la muestra:

Excel._Worksheet workSheet = (Excel._Worksheet)_Excel.Worksheets.Add(); //set columns format to text format workSheet.Columns.NumberFormat = "@";

Nota: este formato de texto se aplicará a la hoja de Excel de tu agujero.

Si desea que una columna en particular aplique el formato de texto, por ejemplo, la primera columna, puede hacer esto:

workSheet.Columns[0].NumberFormat = "@";

o esto aplicará el rango especificado de woorkSheet a formato de texto:

workSheet.get_Range("A1", "D1").NumberFormat = "@";


if (dtCustomers.Columns[j - 1].DataType != typeof(decimal) && dtCustomers.Columns[j - 1].DataType != typeof(int)) { myWorksheet.Cells[i + 2, j].NumberFormat = "@"; }


//where [1] - column number which you want to make text ExcelWorksheet.Columns[1].NumberFormat = "@"; //If you want to format a particular column in all sheets in a workbook - use below code. Remove loop for single sheet along with slight changes. //path were excel file is kept string ResultsFilePath = @"C://Users//krakhil//Desktop//TGUW EXCEL//TEST"; Excel.Application ExcelApp = new Excel.Application(); Excel.Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(ResultsFilePath); ExcelApp.Visible = true; //Looping through all available sheets foreach (Excel.Worksheet ExcelWorksheet in ExcelWorkbook.Sheets) { //Selecting the worksheet where we want to perform action ExcelWorksheet.Select(Type.Missing); ExcelWorksheet.Columns[1].NumberFormat = "@"; } //saving excel file using Interop ExcelWorkbook.Save(); //closing file and releasing resources ExcelWorkbook.Close(Type.Missing, Type.Missing, Type.Missing); Marshal.FinalReleaseComObject(ExcelWorkbook); ExcelApp.Quit(); Marshal.FinalReleaseComObject(ExcelApp);