Как работать с индексом стиля в 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
запись, есть ссылки, которые ссылаются на каждый из следующих разделов в таблице стилей:
- формат нумерации (первый маркер выше)
- шрифт (вторая пуля выше)
- заполнить (третья пуля выше)
- граница (четвертая пуля выше)
пример формата ячейки в коде выглядит так:
// 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.