Форматировать столбец (или ячейку) Excel как текст в C #?

Я теряю ведущие нули, когда копирую значения из листа данных в лист Excel. Это потому, что, вероятно, Excel обрабатывает значения как число, а не текст.

Я создал рабочий лист в C #, и я копирую такие значения:

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

Как форматировать весь столбец или каждую ячейку в виде текста? Связанный вопрос, как myWorksheet.Cells[i + 2, j] показать свойство стиля в Intellisense?

    Ниже приведен код для форматирования столбцов A и C в виде текста в SpreadsheetGear для .NET, который имеет API, который похож на Excel, за исключением того факта, что SpreadsheetGear часто более строго типизирован. Не следует слишком сложно понять, как преобразовать это для работы с 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); 

    Отказ от ответственности: у меня есть ООО «SpreadsheetGear»

    Если вы установили форматирование ячейки в «Текст» до добавления числового значения с начальным нулем, то начальный ноль будет сохранен без искажения результатов, добавив апостроф. Если вы попытаетесь вручную добавить начальное нулевое значение к листу по умолчанию в Excel, а затем преобразовать его в текст, то начальный нуль будет удален. Если вы сначала конвертируете ячейку в текст, добавьте свое значение, это нормально. Этот же принцип применяется при выполнении программно.

      // 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(); } } 

    Перед вашей записью в Excel необходимо изменить формат:

     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 

    Я недавно боролся с этой проблемой, и я узнал две вещи об этих предложениях.

    1. Установка numberFormatting на @ приводит к тому, что Excel слева выравнивает значение и читает его, как если бы это был текст, однако он все же усекает нулевой уровень.
    2. Добавление апострофа в начале приводит к тому, что Excel обрабатывает его как текст и сохраняет нуль, а затем применяет текстовый формат по умолчанию, решая обе проблемы.

    Обманчивый аспект этого заключается в том, что теперь у вас другое значение в ячейке. Когда вы копируете / вставляете или экспортируете в CSV, апостроф не включается.

    Вывод: используйте апостроф, а не числоформирование, чтобы сохранить начальные нули.

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

    Решение, которое работало для меня в Excel Interop:

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

    Этот код должен запускаться перед помещением данных в Excel. Номера столбцов и строк – 1.

    Немного больше деталей. В то время как принятый ответ со ссылкой на SpreadsheetGear выглядит почти корректно, у меня было две проблемы:

    1. Я не использую SpreadsheetGear. Меня интересовала регулярная обмен сообщениями Excel через интерфейс Excel без каких-либо библиотек 3rdparty,
    2. Я искал способ форматирования столбца по номеру, а не используя диапазоны, такие как «A: A».

    Используйте свой WorkSheet.Columns.NumberFormat и установите его в string "@" , вот пример:

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

    Примечание: этот текстовый формат будет применяться для вашего листа excel!

    Если вы хотите, чтобы конкретный столбец применял текстовый формат, например, первый столбец, вы можете сделать это:

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

    или это применит указанный диапазон woorkSheet к текстовому формату:

     workSheet.get_Range("A1", "D1").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); 
    Давайте будем гением компьютера.