Почему индекс стиля ячейки возвращает неправильное значение CellFormat при разборе ячеек Excel с использованием OpenXml SDK?

1

Рассмотрим ячейку общего формата, имеющую значение 39,95. Когда я извлекаю CellFormat ячейки, он возвращает неправильную ячейку format-

CellFormat thisCellFormat = ((CellFormat)cellFmts.ChildElements[(int)thisCell.StyleIndex.Value]);
int fmtId = Convert.ToInt32(thisCellFormat.FormatId.Value);

Возвращаемое значение fmtId равно 1, а в некоторых случаях - 38, где должно быть 2 или 39.

Эта проблема относится только к ячейкам общего формата, я получаю правильный идентификатор для ячеек формата Number.

Ниже приведены стандартные форматы файлов форматов Office ECMA-376 Office с установленными наборами явных форматов ячеек для reference-

Код формата ID
0 Общие
1 0
2 0,00
3 #, ## 0
4 #, ## 0.00
9 0%
10 0,00%
11 0.00E + 00
12 #?/?
13 #??/??
14 мм-дд-гг
15 д-ммм-гг
16 д-ммм
17 мм-м
18 ч: мм AM/PM
19 ч: мм: сс AM/PM
20 ч: мм
21 ч: мм: сс
22 м/д/гг час: мм
37 #, ## 0; (#, ## 0)
38 #, ## 0; Красный
39 #, ## 0.00; (#, ## 0.00)
40 #, ## 0.00; Красный
45 мм: сс
46 [ч]: мм: сс
47 ммss.0
48 ## 0.0E + 0
49 @

  • 1
    @pnuts с использованием системных разделителей. для десятичной и тысяч
  • 0
    Ответ на вопрос заключается в том, как стили таблиц применяются к ячейкам
Показать ещё 2 комментария
Теги:
excel
openxml-sdk
openxml

1 ответ

1
Лучший ответ

Форматы, о которых вы говорите, определяются как стили, и когда Cell создается индекс стиля, устанавливается соответственно с помощью индекса стиля. Формат number format встроен в эти стили, ссылаясь на NumberFormatId

Пример: создание CellFormats в Open XML, примечание разницы

   CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // default                        
   CellFormat cellformat1 = new CellFormat() { NumberFormatId = 0 };
   CellFormat cellformat2 = new CellFormat() { NumberFormatId = 49 };    

Теперь cellformat1 может использоваться для общих ячеек, а cellformat2 может использоваться для принудительных строк строки.

Поэтому, когда вы пытаетесь извлечь код форматирования в общей ячейке, он может возвращать значение null, поскольку NumberFormatId не установлен или 0, если формат номера установлен на общий тип.

Это объясняет, почему вы получаете правильный идентификатор для отформатированных чисел, но не для общих ячеек.

  • 0
    Да, я знаю, что это причина того, что ячейки числового формата работают, но мне нужно выяснить, почему ячейки общего формата возвращают неправильный идентификатор ячейки и как сделать так, чтобы он соответствовал правильному / предполагаемому.
  • 1
    @pnuts null или 0 - это NumberFormatID, о котором он упоминает, а не CellIDID
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню