2009-11-25 3 views
3

Мне нужна другая помощь ... Моя функция экспорта экспортирует мой отчет в виде таблицы в слово. Мне нужно применить свойство горизонтального выравнивания для каждой ячейки. Код, который я написал для экспорта, приведен ниже. Tbl - текстовый блок, который я использую в своем отчете. Здесь я написал код выравнивания. Но не работает .. Пожалуйста, помогите мне решить эту задачу с помощью OpenXML SDK 2,0Горизонтальное выравнивание текста в Word с помощью OpenXml Sdk 2.0

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

Благодаря Rubens Farias,

Моя проблема решена здесь .. мелочью в Коде сделал работу .. Проблема была я дал Обоснование свойство для Run Properties Вместо этого свойства абзаца.

Я изменил код, как

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 
}; 
Смежные вопросы