Set text align to center in an Excel document using OpenXML with C#

broguyman picture broguyman · Mar 20, 2012 · Viewed 32.5k times · Source

I have a document that my asp.net page is creating and I need to align the text of certain columns to center. I have opened the document after manually center the columns in openXML SDK but the code that is reflected does not achieve the desired outcome.

This is how I am setting the custom widths of these columns and I would like to add to this function (method, whatevs) the capability to center the text:

private static Column CreateColumnData(UInt32 StartColumnIndex, UInt32 EndColumnIndex, double ColumnWidth)
    {
        Column column;
        column = new Column();
        column.Min = StartColumnIndex;
        column.Max = EndColumnIndex;
        column.Width = ColumnWidth;
        column.CustomWidth = true;
        //the SDK says to add this next line to center the text but it doesn't work
        column.Style = (UInt32Value)6U;

        return column;
    }

I'm open to another way but I think that the solution has got to be very simple I just can't seem to get it. If anyone can help that would be great.

NOTE: Please keep in mind that I am using OpenXML and will not be using Microsoft.Office.Interop.Excel

Answer

Killnine picture Killnine · Mar 20, 2012

I think the issue is that you are trying to style the column, when it is individual cells that need to be formatted to use a specific horizontal alignment.

I looked around and found the following MSDN documentation:

http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.cellformat_properties.aspx

http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.alignment.aspx

I also found a code example here (Though I didn't test it myself):

http://blogs.msdn.com/b/chrisquon/archive/2009/11/30/stylizing-your-excel-worksheets-with-open-xml-2-0.aspx

I use the Interop most of the time myself, and know that I styled cells and not columns or rows when I wrote up my spreadsheets.

You should be able to create a single style and just apply it a bunch of times to cells as you create them.