【发布时间】:2019-07-08 17:05:53
【问题描述】:
我正在尝试将标题行格式添加到我的 OpenXML 电子表格文档中,但我遇到了上述错误。我很确定这与我添加样式的方式有关,但我无法弄清楚我做错了什么。
在我尝试添加样式之前,文档已正确打开。
非常感谢任何帮助。
private void AddStyles()
{
stylesPart = doc.WorkbookPart.AddNewPart<WorkbookStylesPart>();
stylesPart.Stylesheet = new Stylesheet();
stylesPart.Stylesheet.Fonts = new Fonts();
stylesPart.Stylesheet.Fills = new Fills();
stylesPart.Stylesheet.Borders = new Borders();
stylesPart.Stylesheet.CellFormats = new CellFormats();
stylesPart.Stylesheet.Fonts.Append(new Font()); // normal
stylesPart.Stylesheet.Fonts.Append(new Font(new Bold())); // header
stylesPart.Stylesheet.Fills.Append(new Fill()); //default fill
stylesPart.Stylesheet.Borders.Append(new Borders()); // default border
stylesPart.Stylesheet.CellFormats.Append(new CellFormat() { FormatId = 0, FillId = 0, BorderId = 0, FontId = 0 });
stylesPart.Stylesheet.CellFormats.Append(new CellFormat() { FormatId = 1, FillId = 0, BorderId = 0, FontId = 1 });
}
当我打开它时,它会提示修复它,而且它是正确的。但是,如果我在记事本中打开它,我会得到一些疯狂的东西。
PK ÄCSM5øiº % xl/workbook.xml ¢ ( Á‚0†_eé]‡F !€/^õ æè`dÊã;1‘«·¯›æû«ÓìFñÄÀ–|
以下是其余代码供参考:
public OpenXMLExcelDoc(string sheetName = "Sheet 1")
{
ms = new MemoryStream();
doc = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);
workBookPart = doc.AddWorkbookPart();
workBookPart.Workbook = new Workbook();
workSheetPart = workBookPart.AddNewPart<WorksheetPart>();
workSheetPart.Worksheet = new Worksheet();
sheets = workBookPart.Workbook.AppendChild(new Sheets());
sheet = new Sheet() { Id = workBookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = sheetName };
sheetData = workSheetPart.Worksheet.AppendChild(new SheetData());
sheets.Append(sheet);
AddStyles();
doc.Save();
}
public void StartRow()
{
row = new Row();
}
public void FinishRow()
{
sheetData.AppendChild(row);
}
public void AddCellData(string data, CellValues dataType, FontStyles style = FontStyles.Normal)
{
var newCell = new Cell()
{
CellValue = new CellValue(data),
DataType = new EnumValue<CellValues>(dataType),
StyleIndex = Convert.ToUInt32((int)style)
};
row.Append(newCell);
}
public void AddDataGrid(DataGrid dg)
{
StartRow();
for (var i = 0; i < dg.Columns.Count; i++)
{
AddCellData(dg.Columns[i].HeaderText, CellValues.String, FontStyles.Header);
}
FinishRow();
for (var i = 0; i < dg.Items.Count; i++)
{
var gridRow = dg.Items[i];
StartRow();
for(var j = 0; j < gridRow.Cells.Count; j++)
{
var gridCell = gridRow.Cells[j];
AddCellData(gridCell.Text, CellValues.String);
}
FinishRow();
}
}
public void Finish(string title, HttpResponse Response)
{
doc.Close();
Response.AddHeader("content-disposition", "attachment;filename=" + title + ".xlsx");
ms.Position = 0;
ms.CopyTo(Response.OutputStream);
Response.End();
}
【问题讨论】:
-
你从记事本(上图)得到的代码是修复前还是修复后的?能否请您显示两者的内容(修复之前和之后)。
-
@tgolisch 这是以前的,只是其中的一部分。之后看起来几乎一样,除了这里有很多带有黑色背景的“NUL”实例。