OpenXML SpreadsheetML Боковой текст - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь выяснить, как заставить текст печатать сбоку в ячейке электронной таблицы в OpenXML. Я думаю, что это можно сделать как-то с ExtendedProperties класса Cell. вот что у меня есть.

  Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex);
  cell.DataType = CellValues.InlineString;
  cell.InlineString = new InlineString() { Text = new Text(textToInsert) };

  //fictitious method 
  cell.ExtendedAttributes.SpinSideways();
  worksheetPart.Worksheet.Save()

Ответы [ 2 ]

4 голосов
/ 04 апреля 2012

Стили для ячеек обрабатываются в разделе 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++;
}
1 голос
/ 04 апреля 2012

Сначала необходимо создать таблицу стилей, а затем применить ее к ячейке.

Некоторые важные фрагменты:

Для таблицы стилей вам необходимо указать:

Alignment align = new Alignment();
align.TextRotation.Value = 90;
CellFormat format =  CellFormat(){Alignment= align};

Затем примените ее к ячейке

cell.StyleIndex=INDEXOFYOURSTYLE;

Ресурсы:

Стиль электронной таблицы: http://blogs.msdn.com/b/chrisquon/archive/2009/11/30/stylizing-your-excel-worksheets-with-open-xml-2-0.aspx

MSDN - Выравнивание: http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.alignment.aspx

...