Excel не вставляет ведущий ноль

Я использую Office OpenXml для записи в файл Excel. Файл является шаблоном, поэтому в нем уже есть все мои заголовки и форматирование для моих столбцов. Я вставляю числа с начальными нулями в "специальный" столбец, который в основном состоит из 10 цифр. Однако в моем коде я вижу, что он устанавливает значение, например, 0000000004, Результат в листе со значением 4 в этой ячейке и фактической ячейке, показывающей 0000000004,

Вот мой код для записи в ячейку.

  if (reader[2].ToString().Length < 9)
  {


        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString(); //0045678945

  }
  else
  {
        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString().Substring(0, 9); //0045678945

  }

когда я открываю лист Excel, как я уже говорил выше, моя ценность 45678945 вместо 0045678945

Любая помощь будет оценена.

5 ответов

Решение

Если я правильно понимаю:

Excel показывает числа с ведущими нулями, читая их из C# через OOXML, вы не видите лидирующих нулей.

Скорее всего, Excel устанавливает некоторые правила форматирования вместо хранения фактических начальных нулей.

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

  • отформатировать столбец в Excel как текст
  • в коде C# не ожидайте ведущих нулей, а вместо этого добавьте их

Самый простой способ получить желаемый результат - добавить апостроф к значению, которое вы поместили в ячейку - это говорит Excel, что это строка:

Cell.Value= "'" & "000123"

Будет отображаться как 000123

Вот немного кода, чтобы показать, как все работает (по крайней мере, как они работают для меня, в Excel 2010):

Sub testFormat()
[A1].Value = "000123"
[A2].Value = "'000123"
[A3].Value = "000123"
[A3].NumberFormat = "@"
[A4].Value = "'000123"
[A4].NumberFormat = "@"
End Sub

Результат этого следующий:

форматирование с ведущими нулями

Как видите, есть три ячейки, которые показывают ведущие нули:

  1. Ячейка, в которую я ввел строку с апострофом перед
  2. Ячейка, которая была отформатирована с "@" (="текст") формат
  3. Ячейка с апострофом и форматированием текста

Я не уверен, что вы сделали, чтобы апостроф появился в вашей таблице... Но я надеюсь, что вышесказанное вдохновит вас на решение вашей проблемы.

Я полагаю, что если вы установите для DataType ячейки значение String или SharedString, первые 0 будут сохранены. Excel увидит это как текст и будет просто воспринимать значение буквально, а не пытаться применять какие-либо правила форматирования.

cell.DataType = new EnumValue<CellValues>( CellValues.SharedString );

ИЛИ cell.DataType = new EnumValue( CellValues.String);

Если вы используете DataTable, вам нужно взять другой DataTable, а затем вам нужно перебрать все ячейки в datatable и добавить текст ячейки с пробелом, то есть с ' ';. Мы не можем изменить строки в той же таблице, потому что это будет сгенерировать исключение, в котором говорится: "Коллекция была изменена". Нам нужно получить новый набор данных.

Рассмотрим следующий код.

    //To get the result with leading zero's in excel this code is written.
    DataTable dtUpdated=new DataTable();
    //This gives similar schema to the new datatable
    dtUpdated = dtReports.Clone();
        foreach (DataRow row in dtReports.Rows)
        {
            for (int i = 0; i < dtReports.Columns.Count; i++)
            {
                string oldVal = row[i].ToString();
                string newVal = "&nbsp;"+oldVal;
                row[i] = newVal;
            }
            dtUpdated.ImportRow(row); 
        }

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

Чтобы не обрезать ведущие нули из Excel, необходимо установить числовой формат для ячеек: Text,

Другие вопросы по тегам