2012-04-03 3 views
0

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

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() 
+0

дубликата HTTP: // StackOverflow .com/вопросы/605966 6/answer/submit? S = 9219459d-a516-4000-9913-d6d5843fecb7? – emd

ответ

3

Стили ячеек обрабатываются в 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++; 
} 
+0

Я получаю сообщение об ошибке Elements Последовательность не имеет элементов. Мысли[email protected] – Kulingar

+0

Это означает, что элемент CellFormats не существует, и вам нужно будет добавить его или использовать файл Excel, у которого уже определен CellFormat. – amurra

+0

Как его добавить? :( – Kulingar

1

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

Некоторые важные snippits:

Для стилей вам нужно будет включать в себя:

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

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

cell.StyleIndex=INDEXOFYOURSTYLE;

Ресурсы:

Styling таблица: 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