我正在试图弄清楚如何在OpenXML中的电子表格单元格中侧面打印文本。我认为它可以通过Cell类的ExtendedProperties以某种方式完成。这就是我所拥有的。
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 :(得分:4)
单元格的样式在Excel文档的CellFormats
部分中处理。当您查看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
索引对应于此单元格的格式。这是CellFormats
的XML,希望能让它更清晰一点:
<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
来控制它。以下是为了创建旋转90度的CellFormat而需要使用的代码:
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 :(得分:1)
首先,您需要创建样式表,然后需要将其应用于单元格。
一些重要的信息:
对于样式表,您需要包括:
Alignment align = new Alignment();
align.TextRotation.Value = 90;
CellFormat format = CellFormat(){Alignment= align};
然后将其应用于单元格
cell.StyleIndex=INDEXOFYOURSTYLE;
资源:
MSDN-对齐: http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.alignment.aspx