1

我试图弄清楚如何让文本在 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()
4

2 回答 2

4

单元格的样式在CellFormatsExcel 文档的部分中处理。s当您查看 XML 并看到属性设置为整数时,您可以判断单元格何时具有格式:

<x:c r="A1" s="1" t="s" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:v>0</x:v>
</x:c>

该属性代表列表中与此单元格的格式相对应StyleIndexCellFormat索引。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:xfor 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++;
}
于 2012-04-04T14:19:46.067 回答
1

首先,您需要创建一个样式表,然后您需要将其应用到单元格。

一些重要的片段:

对于样式表,您需要包括:

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

于 2012-04-04T14:17:53.947 回答