打开XML Sheetview从右到左

我需要在ExporToExcel类中添加SheetView设置。 但是在导出之后,即使创build了工作表并设置了SheetView设置,也显示Excel单元格内容为空。 我检查了这个网站和其他网站上的所有post,但是我没有成功。 每当我得到一个文档损坏的消息或电子表格是空的。

private static void WriteExcelFile(DataSet ds, SpreadsheetDocument spreadsheet) { spreadsheet.AddWorkbookPart(); spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView())); WorkbookStylesPart workbookStylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>("rIdStyles"); //Stylesheet stylesheet = new Stylesheet(); workbookStylesPart.Stylesheet = CreateStylesheet(); uint worksheetNumber = 1; Sheets sheets = spreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); foreach (DataTable dt in ds.Tables) { string worksheetName = dt.TableName; WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>(); Sheet sheet = new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart), SheetId = worksheetNumber, Name = worksheetName }; newWorksheetPart.Worksheet = new Worksheet(new SheetViews(new SheetView() { WorkbookViewId=0,RightToLeft=true}),new SheetData()); newWorksheetPart.Worksheet.Save(); sheets.Append(sheet); WriteDataTableToExcelWorksheet(dt, newWorksheetPart); worksheetNumber++; } spreadsheet.WorkbookPart.Workbook.Save(); } private static void WriteDataTableToExcelWorksheet(DataTable dt, WorksheetPart worksheetPart) { OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart, Encoding.ASCII); writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(new SheetData()); string cellValue = ""; int numberOfColumns = dt.Columns.Count; bool[] IsNumericColumn = new bool[numberOfColumns]; bool[] IsDateColumn = new bool[numberOfColumns]; string[] excelColumnNames = new string[numberOfColumns]; for (int n = 0; n < numberOfColumns; n++) excelColumnNames[n] = GetExcelColumnName(n); // // Create the Header row in our Excel Worksheet // uint rowIndex = 1; writer.WriteStartElement(new Row { RowIndex = rowIndex }); for (int colInx = 0; colInx < numberOfColumns; colInx++) { DataColumn col = dt.Columns[colInx]; AppendTextCell(excelColumnNames[colInx] + "1", col.ColumnName, ref writer); IsNumericColumn[colInx] = (col.DataType.FullName == "System.Decimal") || (col.DataType.FullName == "System.Int32") || (col.DataType.FullName == "System.Double") || (col.DataType.FullName == "System.Single"); IsDateColumn[colInx] = (col.DataType.FullName == "System.DateTime"); } writer.WriteEndElement(); // End of header "Row" double cellNumericValue = 0; foreach (DataRow dr in dt.Rows) { ++rowIndex; writer.WriteStartElement(new Row { RowIndex = rowIndex }); for (int colInx = 0; colInx < numberOfColumns; colInx++) { cellValue = dr.ItemArray[colInx].ToString(); cellValue = ReplaceHexadecimalSymbols(cellValue); if (IsNumericColumn[colInx]) { cellNumericValue = 0; if (double.TryParse(cellValue, out cellNumericValue)) { cellValue = cellNumericValue.ToString(); AppendNumericCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer); } } else if (IsDateColumn[colInx]) { // This is a date value. DateTime dtValue; string strValue = ""; if (DateTime.TryParse(cellValue, out dtValue)) strValue = dtValue.ToShortDateString(); AppendTextCell(excelColumnNames[colInx] + rowIndex.ToString(), strValue, ref writer); } else { AppendTextCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer); } } writer.WriteEndElement(); // End of Row } writer.WriteEndElement(); // End of SheetData writer.WriteEndElement(); // End of worksheet writer.Close(); } 

使表单读取RightToLeft表单的代码是正确的。 但是, WriteDataTableToExcelWorksheetCreateStylesheet的代码并不完整,并且存在一些问题。

我可以在这个链接findWriteDataTableToExcelWorksheet的原始代码。 然后,我用Open XML生产力工具将一个简单的Excel文件转换为C#代码,并重新使用一种方法来创build一个新的样式表。

我用这个代码生成的excel文件如下所示: 在这里输入图像说明

我已经把这个新的代码推到GitHub 。 有一个包装WPF应用程序,指导在您的机器上生成文件的位置。

这里是安装Open XML生产力工具的指南 。