2009-11-25 70 views
3

我需要另一個幫助...我的導出功能將我的報告導出爲單詞表格。 我需要爲每個單元應用水平對齊屬性。我爲出口寫的代碼如下。 Tbl是我在報告中使用的一個文本塊。 我在這裏寫了對齊碼。但並不作品。請幫助我使用的OpenXML SDK 2.0使用OpenXml Sdk 2.0的Word中的水平文本對齊

using Word = DocumentFormat.OpenXml.Wordprocessing; 

WordprocessingDocument WordDoc = WordprocessingDocument.Create(SavePath, WordprocessingDocumentType.Document); 
MainDocumentPart mainDocument = WordDoc.AddMainDocumentPart(); 
mainDocument.Document = new Word.Document(); 
StyleDefinitionsPart StylesDefs = mainDocument.AddNewPart<StyleDefinitionsPart>(); 
StylesDefs.Styles = new Word.Styles(); 
Word.Body body = new Word.Body(); 
Word.Table WordTable = new Word.Table(); 
Word.TableRow Row; 

Word.TableCell Cell = new Word.TableCell(); 
Word.Style ParaStyle = new Word.Style(new Word.Name() { Val = Tbl.GetHashCode().ToString() }); 
Word.RunProperties ParaRunProperties = new Word.RunProperties(); 
ParaRunProperties.Append(new Word.RunFonts() { Ascii = Tbl.FontFamily.ToString() }); 
if (Tbl.HorizontalAlignment == HorizontalAlignment.Center) 
    ParaRunProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Center }); 
else if (Tbl.HorizontalAlignment == HorizontalAlignment.Right) 
     ParaRunProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Right }); 
else 
     ParaRunProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Left }); 
ParaStyle.Append(ParaRunProperties); 
StylesDefs.Styles.Append(ParaStyle); 
Word.ParagraphProperties ParaProperties = new Word.ParagraphProperties() { ParagraphStyleId = new Word.ParagraphStyleId() { Val = Tbl.GetHashCode().ToString() } }; 
Cell.Append(new Word.Paragraph(ParaProperties, new Word.Run(new Word.Text(Tbl.Text)))); 

    Row.Append(Cell); 
    WordTable.Append(Row); 
    body.Append(WordTable); 
    mainDocument.Document.Append(body); 
    mainDocument.Document.Save(); 
    WordDoc.Close(); 

回答

5

來完成這一任務,您應該使用w:jc元素爲你的第(w:p)性能(w:pPr)來定義你想要的水平對齊方式:

<w:tr> 
    <w:tc><!-- your table cell --> 
    <w:p> 
     <w:pPr> 
     <w:jc w:val="right"/><!-- horizontal alignment = right --> 
     </w:pPr> 
     <w:r> 
     <w:t>Foo bar</w:t> 
     </w:r> 
    </w:p> 
    </w:tc> 
</w:tr> 

您總是可以將Word文檔保存爲OpenXML,將其重命名爲.zip並將其解壓縮以檢查如何在OpenXML中執行某些操作。

3

感謝魯本斯法里亞斯,

我的問題在這裏得到解決。在代碼小的變化使它工作..問題是我給了正當性屬性運行屬性,而不是段落屬性。

我改變的代碼爲

Word.ParagraphProperties ParaProperties = new Word.ParagraphProperties() { ParagraphStyleId = new Word.ParagraphStyleId() { Val = Tbl.GetHashCode().ToString() } }; 
if (Tbl.HorizontalAlignment == HorizontalAlignment.Center) 
    ParaProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Center }); 
else if (Tbl.HorizontalAlignment == HorizontalAlignment.Right) 
     ParaProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Right }); 
else 
     ParaProperties.Append(new Word.Justification() { Val = Word.JustificationValues.Left }); 

這解決了我的問題..再次感謝魯本斯的幫助,與我的失誤被認定。

1

這裏您有樣式表中三種不同的對齊方式。您可以使用此構造函數來傳遞:

public Stylesheet(params OpenXmlElement[] childElements); 

這是可能的,因爲CellFormats從OpenXmlElement繼承。在我的代碼中,我創建了自己的填充,字體和邊框......如果你不需要它,請不要關注這個。

new CellFormats(
         //VALUE 
         // Index 0 - The default cell style - Alignment left 
         new CellFormat(new Alignment() { Horizontal = HorizontalAlignmentValues.Left, Vertical = VerticalAlignmentValues.Center }) 
            { FontId = 0, FillId = 0, BorderId = 0, ApplyBorder = true }, 

         //HEADER 
         // Index 1 - Bold - Green background - align center 
         new CellFormat(new Alignment() { Horizontal = HorizontalAlignmentValues.Center, Vertical = VerticalAlignmentValues.Center }) 
            { FontId = 1, FillId = 2, BorderId = 0, ApplyFont = true, ApplyBorder = true, ApplyFill = true }, 

         //ERROR HEADER 
         //index 2 - bold text - align center 
         new CellFormat(new Alignment() { Horizontal = HorizontalAlignmentValues.Center, Vertical = VerticalAlignmentValues.Center }) 
            { FontId = 1, FillId = 0, BorderId = 0, ApplyFont = true, ApplyBorder = true, ApplyFill = true } 
       ) 

所以,最後你可以設置你的細胞在這樣一個標題:

private enum CellStyleEnum 
{ 
    Value = 0, 
    Header = 1, 
    Error = 2  
} 

var cell = new Cell 
{ 
    DataType = CellValues.InlineString, 
    CellReference = header + index, 
    StyleIndex = (UInt32)CellStyleEnum.Header 
};