Как я могу изменить цвет переднего плана и фона OpenXML TableCell?

Я создаю ячейку таблицы следующим образом:

private static TableCell GetHeaderCell(string cellText)
{
    var tc = new TableCell(new Paragraph(new Run(new Text(cellText))));
    return tc;
}

Я хочу, чтобы он был синим с белым текстом.

Я пробовал следующее, но это не работает; когда я пытаюсь открыть документ, я получаю сообщение об ошибке с содержимым:

private static TableCell GetHeaderCell(string cellText)
{
    var props = new TableCellProperties();
    var solidFill = new SolidFill();
    var rgbColorHex = new RgbColorModelHex() { Val = "FF0000" };//Red Background for Single TableCell.

    solidFill.Append(rgbColorHex);        
    props.Append(solidFill);

    var paragraph = new Paragraph(new Run(new Text(cellText)));

    var tc = new TableCell(paragraph, props);

    return tc;
}

Полная ошибка выглядит следующим образом:

введите здесь описание изображения


person DaveDev    schedule 16.07.2013    source источник
comment
Не могли бы вы сообщить нам полное сообщение об ошибке и строку, которая выдает ошибку.   -  person Microsoft DN    schedule 16.07.2013
comment
Я включил изображение ошибки. Там действительно не так много информации. Могу ли я найти это где-то еще?   -  person DaveDev    schedule 16.07.2013
comment
Возможно, ваш файл поврежден. Попробуйте открыть тот же файл вручную. Если он откроется, возможно, в самом коде есть какая-то ошибка.   -  person Microsoft DN    schedule 16.07.2013
comment
Я пытаюсь открыть файл с помощью Word. Это то, что показывает мне сообщение.   -  person DaveDev    schedule 16.07.2013
comment
Для MS Word доступно одно решение: открыть и восстановить. Это восстановит ваш поврежденный файл .docx, после чего вы сможете его открыть.   -  person Microsoft DN    schedule 16.07.2013
comment
К сожалению, слишком много документации написано, поскольку этот код выполняет этот эффект. Но пользователям нужно, чтобы получить этот эффект, написать этот код. Я искал эту информацию по всему docs.microsoft.com и собирался спросить ее на stackoverflow.com. Возможно, Microsoft (и другие) поймут намек.   -  person TheBick    schedule 15.10.2019


Ответы (1)


Это вопрос из двух частей:

1) Как изменить передний план OpenXML TableCell

Передний план OpenXML TableCell определяется свойствами Run, называемого RunProperties. Чтобы добавить цвет в прогон, вы должны добавить объект Color, используя свойство Val.

// Create the RunProperties object for your run
DocumentFormat.OpenXml.Wordprocessing.RunProperties rp = 
    new DocumentFormat.OpenXml.Wordprocessing.RunProperties();
// Add the Color object for your run into the RunProperties
rp.Append(DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "ABCDEF" }); 
// Create the Run object
DocumentFormat.OpenXml.WordProcessing.Run run = 
    new DocumentFormat.OpenXml.WordProcessing.Run();
// Assign your RunProperties to your Run
run.RunProperties = rp;
// Add your text to your Run
run.Append(new Text("My Text"));

См. справочный вопрос.

2) Как изменить фон OpenXML TableCell

Фон TableCell можно изменить с помощью TableCellProperties, аналогично приведенному выше Run, в котором используется RunProperties. Однако вы применяете объект Shading к вашему TableCellProperties.

// Create the TableCell object
DocumentFormat.OpenXml.Wordprocessing.TableCell tc = 
    new DocumentFormat.OpenXml.Wordprocessing.TableCell();
// Create the TableCellProperties object
TableCellProperties tcp = new TableCellProperties(
    new TableCellWidth { Type = TableWidthUnitValues.Auto, }
);
// Create the Shading object
DocumentFormat.OpenXml.Wordprocessing.Shading shading = 
    new DocumentFormat.OpenXml.Wordprocessing.Shading() {
    Color = "auto",
    Fill = "ABCDEF",
    Val = ShadingPatternValues.Clear
};
// Add the Shading object to the TableCellProperties object
tcp.Append(shading);
// Add the TableCellProperties object to the TableCell object
tc.Append(tcp);

// also need to ensure you include the text, otherwise it causes an error (it did for me!)
tc.Append(new Paragraph(new Run(new Text(cellText))));

См. справочный вопрос.

person Bob.    schedule 16.07.2013
comment
@DaveDev Ха-ха, ну, упс. Вы поняли идею! - person Bob.; 16.07.2013
comment
Как работает Val документаFormat.OpenXml.Wordprocessing.Color? Это шестнадцатеричный код цвета? - person Cirelli94; 11.10.2018