使用带有C#的OpenXML在Excel文档中设置文本居中对齐

本文关键字:文档 置文本 对齐 Excel OpenXML | 更新日期: 2023-09-27 18:28:35

我的asp.net页面正在创建一个文档,我需要将某些列的文本居中对齐。我在openXMLSDK中手动居中列后打开了文档,但所反映的代码没有达到预期的结果。

这就是我设置这些列的自定义宽度的方式,我想向这个函数(方法,whatevs)添加居中文本的功能:

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;
    }

我对另一种方式持开放态度,但我认为解决方案必须非常简单,我似乎无法理解。如果有人能帮忙,那就太好了。

注意:请记住,我使用的是OpenXML,不会使用Microsoft.Office.Interop.Excel

使用带有C#的OpenXML在Excel文档中设置文本居中对齐

我认为问题是,当单个单元格需要格式化以使用特定的水平对齐方式时,您正在尝试为列设置样式

我环顾四周,发现了以下MSDN文档:

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

我还在这里找到了一个代码示例(虽然我自己没有测试):

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

我自己大部分时间都在使用Interop,并且知道在编写电子表格时,我设计的是单元格,而不是列或行。

您应该能够创建一个样式,并在创建单元格时多次将其应用于单元格。

以下方法适用于我的

//using OfficeOpenXml;
//using OfficeOpenXml.Style;
workSheet.Cells[rowIndex, 22].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;

参考

  1. 使用开放式XML SDK所需的基本格式
  2. 在C#中使用openXML为excel表中的单元格着色
  3. OpenXML电子表格(SpreadsheetML)中的单元格样式

您可以尝试合并单元格,编辑高度和列,并水平和垂直对齐中心

 var worksheet = wb.Worksheets.Add("Overzicht");
            //  Adding text
            worksheet.Cell("B2").Value = "Overzicht activiteit";
             var rngMainTitle = worksheet.Range("B2:E3");
             rngMainTitle.FirstCell().Style
                 .Font.SetBold()
                 .Fill.SetBackgroundColor(XLColor.CornflowerBlue)
                 .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                 .Alignment.SetVertical(XLAlignmentVerticalValues.Center);
             //Merge title cells
             rngMainTitle.FirstRow().Merge();
            worksheet.Column(2).Width = 31;
            worksheet.Column(3).Width = 18;
            worksheet.Column(4).Width = 18;
            worksheet.Column(5).Width = 18;
            worksheet.Row(2).Height = 25;

如果您正在研究如何在excel单元格中对齐文本,则需要在cellFormat对象上应用对齐

 CellFormat cellFormat = new CellFormat() { NumberFormatId = 0, FontId = 0, 
 FillId = 0, BorderId = 0, ApplyAlignment = true }; 
 Alignment alignment = new Alignment();
 alignment.Vertical = VerticalAlignmentValues.Center;
 alignment.Horizontal = HorizontalAlignmentValues.Center;
 CellFormat.Alignment = alignment;

你可以在微软文档中阅读更多

https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cellformat.alignment?view=openxml-2.8.1

您只需选择单元格并设置文本对齐即可:

ws.Cell("A1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

ws是您的工作表:

 XLWorkbook workbook = new XLWorkbook();
        var ws = workbook.Worksheets.Add("Text align");

试试这个

workSheet_range.HorizontalAlignment =
     Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;