Стили для ячеек обрабатываются в разделе CellFormats
документа Excel. Вы можете определить, когда ячейка имеет формат, когда вы посмотрите на XML и увидите, что атрибут s
имеет целое число:
<x:c r="A1" s="1" t="s" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:v>0</x:v>
</x:c>
Этот атрибут обозначает StyleIndex
, который является индексом CellFormat
в списке CellFormats
, который соответствует форматированию для этой ячейки. Вот XML CellFormats
, который, как мы надеемся, сделает его немного более понятным:
<x:cellXfs count="2" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" />
<x:xf numFmtId="0" fontId="0" fillId="1" borderId="1" xfId="0" />
</x:cellXfs>
В приведенном выше XML у нас есть элемент x:cellXfs
, который является элементом CellFormats
, и у него есть два дочерних элемента x:xf
или CellFormat
элементов. Из атрибута StyleIndex
мы знаем, что нам нужен первый индекс (или второй элемент) под элементом CellFormats
, что означает, что мы хотим это CellFormat
:
<x:xf numFmtId="0" fontId="0" fillId="1" borderId="1" xfId="0" />
Теперь для поворота текста в ячейке вам нужно будет управлять этим с помощью CellFormat
. Вот код, который вам нужно будет использовать для создания CellFormat с поворотом на 90 градусов:
public CellFormat GenerateCellFormat()
{
CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyAlignment = true };
Alignment alignment1 = new Alignment(){ TextRotation = (UInt32Value)90U };
cellFormat1.Append(alignment1);
return cellFormat1;
}
Если вы хотите, чтобы текст вращался под другим углом, просто замените 90U на любой угол, который вы хотите от -90 до 90.
Теперь вам нужно будет вставить это CellFormat
в CellFormats
и затем установить этот новый индекс для StyleIndex
ячейки, которую вы хотите повернуть:
Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex);
cell.StyleIndex = InsertCellFormat(workbookPart, GenerateCellFormat());
// Helper method to insert the cell format in the CellFormats
public static uint InsertCellFormat(WorkbookPart workbookPart, CellFormat cellFormat)
{
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
return (uint)cellFormats.Count++;
}