Как работать с индексом стиля в Open xml?

может ли кто-нибудь объяснить, как работает индекс стиля в OpenXml? У меня есть бизнес-требование, где мне нужно применить цвет фона к определенным ячейкам на листе excel. И какой-то стиль уже применяется к другим ячейкам. Поэтому мне нужно решить, какой индекс стиля мне нужно применить.

1 ответов


стиль OpenXML может быть запутанным, когда вы впервые посмотрите на него. Стиль документа Excel подпадает под SpreadsheetML язык разметки, который отличается от Word и PowerPoint..

для типичных ячеек в Excel требуется только информация о стиле-StyleIndex (как вы указали).

Cell cell16 = new Cell(){ CellReference = "HU1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };

это соответствует атрибуту s в XML:

      <x:c r="HU1" s="1" t="s">
        <x:v>0</x:v>
      </x:c>

на StyleIndex является нулевым индексом CellFormat запись в стилях часть.

часть стилей (она же таблица стилей книги) содержит следующие разделы:

  • Форматы Нумерации
  • шрифты
  • заполняет
  • в границах
  • Форматы Стилей Ячеек
  • Формат Ячеек
  • Стили Ячеек
  • Дифференциальные Форматы
  • таблица Стили
  • цвета
  • Список Расширений Таблицы Стилей

теперь внутри CellFormat запись, есть ссылки, которые ссылаются на каждый из следующих разделов в таблице стилей:

  1. формат нумерации (первый маркер выше)
  2. шрифт (вторая пуля выше)
  3. заполнить (третья пуля выше)
  4. граница (четвертая пуля выше)

пример формата ячейки в коде выглядит так:

// this line is important to your question
CellFormat cellFormat5 = new CellFormat(){ NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)11U, 
//the rest of the CellFormat definition is not so important to your question
FormatId = (UInt32Value)0U, ApplyFill = true, ApplyBorder = true, ApplyAlignment = true };

чтобы ответить на ваш вопрос:применить определенный цвет фона для некоторых ячеек . Допустим, мы хотим обновить cell B3 таблицы и B3 уже StyleIndex of 10.

вам нужно будет выполнить следующие шаги:

Шаг 1. Если это новый цвет фона в электронной таблице, добавьте фон (он же Fill) к Fills раздел таблицы стилей (третий маркер выше), который содержит твой новый цвет. Если цвет уже существует, нужно найти и запомнить индекс существующей Fill для этого цвета. В любом случае, для этого примера скажем Fill индекс вы requre является 25.

Шаг 2. Создайте новый CellFormat что это копия!--5--> по индексу 10. Вы добавите это новое CellFormat до конца . Скажем, индекс нового CellFormat будет 53.

Шаг 3. Вы обновляете CellFormat at индекс 53 и сделать его Fill свойство индекса be 25 (из Шага 1).

последний шаг: обновление ячейки в вопрос B3, чтобы новый StyleIndex of 53

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

этот ответ исходит в основном из моего опыта, а также интерпретации страниц 73-79 из бесплатной электронной книги: Open XML-разметка объяснена - Ваутер ван Вугт. Это хорошая ссылка для использования для всех OpenXml.