如何在创buildexcel文件时使用OpenXml添加文本包装到单元格?

如何在使用OpenXml生成.xlsx文件时设置文本单元格的格式? 这是我目前的代码:

public void Excel() { var viewModel = new RequirementIndexData(); viewModel.Requirements = db.Requirement; MemoryStream ms = new MemoryStream(); SpreadsheetDocument dc = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook); WorkbookPart mdp = dc.AddWorkbookPart(); WorksheetPart wsp = mdp.AddNewPart<WorksheetPart>(); Workbook wb = new Workbook(); FileVersion fv = new FileVersion(); fv.ApplicationName = "Microsoft Office Excel"; Worksheet ws = new Worksheet(); SheetData sd = new SheetData(); Columns columns = new Columns(); columns.Append(CreateColumnData(1, 1, 95)); ws.Append(columns); Row r1 = new Row() { RowIndex = (UInt32Value)1u }; Cell c1 = new Cell(); c1.DataType = CellValues.SharedString; c1.CellValue = new CellValue(OpenSoft.AgileAnalytics.EF.App_LocalResources.GlobalRes.VersionNumber + " " + viewModel.Requirements.OrderBy(r => r.CreatedOn).Select(r => r.CurentVersion).First().ToString()); r1.Append(c1); sd.Append(r1); for (int i = 2; i < viewModel.Requirements.Count() + 2; i++) { Row row2; row2 = new Row() { RowIndex = (UInt32)i, Height = 25, DyDescent = 1.50D, Hidden = false, Collapsed = false }; Cell cell2 = new Cell() { StyleIndex = Convert.ToUInt32(1) }; cell2.DataType = CellValues.SharedString; cell2.CellValue = new CellValue((i - 1).ToString() + ". " + viewModel.Requirements.OrderBy(r => r.CreatedOn).Select(r => r.Definition).ElementAt(i - 2).ToString()); row2.Append(cell2); sd.Append(row2); } ws.Append(sd); wsp.Worksheet = ws; wsp.Worksheet.Save(); Sheets sheets = new Sheets(); Sheet sheet = new Sheet(); sheet.Name = "specification1"; sheet.SheetId = 1; sheet.Id = mdp.GetIdOfPart(wsp); sheets.Append(sheet); wb.Append(fv); wb.Append(sheets); dc.WorkbookPart.Workbook = wb; dc.WorkbookPart.Workbook.Save(); dc.Close(); string filename = "specification1.xlsx"; Response.Clear(); byte[] dt = ms.ToArray(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename)); Response.BinaryWrite(dt); Response.End(); } private WorkbookStylesPart AddStyleSheet(SpreadsheetDocument spreadsheet) { WorkbookStylesPart stylesheet = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>(); Stylesheet workbookstylesheet = new Stylesheet(); // <Fonts> Font font0 = new Font(); // Default font Fonts fonts = new Fonts(); // <APENDING Fonts> fonts.Append(font0); // <Fills> Fill fill0 = new Fill(); // Default fill Fills fills = new Fills(); // <APENDING Fills> fills.Append(fill0); // <Borders> Border border0 = new Border(); // Defualt border Borders borders = new Borders(); // <APENDING Borders> borders.Append(border0); // <CellFormats> CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // Default style : Mandatory CellFormat cellformat1 = new CellFormat(new Alignment() { WrapText = true }); // Style with textwrap set // <APENDING CellFormats> CellFormats cellformats = new CellFormats(); cellformats.Append(cellformat0); cellformats.Append(cellformat1); // Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER> workbookstylesheet.Append(fonts); workbookstylesheet.Append(fills); workbookstylesheet.Append(borders); workbookstylesheet.Append(cellformats); // Finalize stylesheet.Stylesheet = workbookstylesheet; stylesheet.Stylesheet.Save(); return stylesheet; } 

你需要为此定义样式。 样式在样式表中定义。 每种风格都有一个ID,当你创build单元时,你可以引用定义的风格ID。

将样式表定义为电子表格:

  private WorkbookStylesPart AddStyleSheet(SpreadsheetDocument spreadsheet) { WorkbookStylesPart stylesheet = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>(); Stylesheet workbookstylesheet = new Stylesheet(); // <Fonts> Font font0 = new Font(); // Default font Fonts fonts = new Fonts(); // <APENDING Fonts> fonts.Append(font0); // <Fills> Fill fill0 = new Fill(); // Default fill Fills fills = new Fills(); // <APENDING Fills> fills.Append(fill0); // <Borders> Border border0 = new Border(); // Defualt border Borders borders = new Borders(); // <APENDING Borders> borders.Append(border0); // <CellFormats> CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // Default style : Mandatory CellFormat cellformat1 = new CellFormat(new Alignment() { WrapText=true}); // Style with textwrap set // <APENDING CellFormats> CellFormats cellformats = new CellFormats(); cellformats.Append(cellformat0); cellformats.Append(cellformat1); // Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER> workbookstylesheet.Append(fonts); workbookstylesheet.Append(fills); workbookstylesheet.Append(borders); workbookstylesheet.Append(cellformats); // Finalize stylesheet.Stylesheet = workbookstylesheet; stylesheet.Stylesheet.Save(); return stylesheet; } 

现在当你添加单元格时,使用定义的样式ID如下:

 Cell c1 = new Cell(){StyleIndex = Convert.ToUInt32(1)}; // Assign our defined style with text wrap. 

编辑:您需要在添加工作簿部分后添加样式表..

 using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; //pathToExcel is filename of the existing file using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(pathToExcel, true)) { //Get workbookpart WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorkbookStylesPart wbsp = CreateStylesheet(workbookPart.WorkbookStylesPart); //then access to the worksheet part List<WorksheetPart> worksheetPart = workbookPart.WorksheetParts.ToList(); foreach (WorksheetPart WSP in worksheetPart) { //find sheet data IEnumerable<SheetData> sheetData = WSP.Worksheet.Elements<SheetData>(); //Iterate through every sheet inside Excel sheet foreach (SheetData SD in sheetData) { IEnumerable<Row> row = SD.Elements<Row>(); // Get the row int rowindex = 1; foreach (Row currentrow in row) { foreach (Cell cell in currentrow.Descendants<Cell>()) { //Doing Wordwrap in the cell using openxml - in open xml we need to do cell level word wrap cell.StyleIndex = Convert.ToUInt32(1); } //Here Row AutoFit property is not available, setting the row height manually and skipping 1st two rows if (rowindex > 2) { currentrow.Height = currentrow.Height + 5; currentrow.CustomHeight = true; } rowindex++; } } WSP.Worksheet.Save(); } //workbookPart.Workbook.Save(); spreadsheetDocument.Close(); } private static WorkbookStylesPart CreateStylesheet(WorkbookStylesPart spreadsheet) { WorkbookStylesPart stylesheet = spreadsheet; Stylesheet workbookstylesheet = new Stylesheet(); // <CellFormats> CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // Default style : Mandatory CellFormat cellformat1 = new CellFormat(new Alignment() { WrapText = true }); //Style with textwrap set Fills fills = new Fills(); Fill fill; PatternFill patternFill; fill = new Fill(); patternFill = new PatternFill(); patternFill.PatternType = PatternValues.None; fill.PatternFill = patternFill; fills.Append(fill); //<APENDING CellFormats> CellFormats cellformats = new CellFormats(); cellformats.Append(cellformat0); cellformats.Append(cellformat1); // Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER> workbookstylesheet.Append(fills); workbookstylesheet.Append(cellformats); // Finalize stylesheet.Stylesheet = workbookstylesheet; stylesheet.Stylesheet.Save(); return stylesheet; }