问题描述
当我尝试使用OpenXML打开excel文件时。 Excel运行正常,但我的style属性无法使用。
-
我需要给我的excel数据列提供自动宽度属性。我找到了此解决方案,但不适用于我
https://stackoverflow.com/questions/18268620/openxml-auto-size-column- width- in-excel
public static string OpenXMLCreateXL(string FolderPath,DataSet tableSet)
{
WorkbookPart wBookPart = null;
var datetime = DateTime.Now.ToString().Replace("/","_").Replace(":","_");
string FilePath = "";
foreach (DataTable table1 in tableSet.Tables)
{
if (table1.Rows.Count != 0)
{
using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Create(FilePath,SpreadsheetDocumentType.Workbook))
{
wBookPart = spreadsheetDoc.AddWorkbookPart();
wBookPart.Workbook = new Workbook();
uint sheetId = 1;
spreadsheetDoc.WorkbookPart.Workbook.Sheets = new Sheets();
Sheets sheets = spreadsheetDoc.WorkbookPart.Workbook.GetFirstChild();
WorkbookStylesPart wbsp = wBookPart.AddNewPart();
wbsp.Stylesheet = CreateStylesheet();
wbsp.Stylesheet.Save();
foreach (DataTable table in tableSet.Tables)
{
if (table.Rows.Count != 0)
{
table.TableName = table.Rows[0]["LeaseCondition"].ToString();
WorksheetPart wSheetPart = wBookPart.AddNewPart();
Sheet sheet = new Sheet() { Id = spreadsheetDoc.WorkbookPart.GetIdOfPart(wSheetPart),SheetId =
sheetId,Name = table.TableName };
sheets.Append(sheet);
SheetData sheetData = new SheetData();
wSheetPart.Worksheet = new Worksheet();
Row headerRow = new Row();
Columns columns = new Columns();
int ColumnNumber = 1;
foreach (DataColumn column in table.Columns)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(column.ColumnName);
cell.StyleIndex = 2;
headerRow.AppendChild(cell);
Column column1 = new Column();
column1.Width = 30; ;
column1.BestFit = true;
column1.CustomWidth = true; //how i can set autowidth here?
column1.Min = Convert.ToUInt32(ColumnNumber);
column1.Max = Convert.ToUInt32(ColumnNumber);
columns.AppendChild(column1);
ColumnNumber = ColumnNumber + 1;
}
wSheetPart.Worksheet.AppendChild(columns);
sheetData.AppendChild(headerRow);
foreach (DaTarow dr in table.Rows)
{
Row row = new Row();
foreach (DataColumn column in table.Columns)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(dr[column].ToString());
cell.StyleIndex = 1;
row.AppendChild(cell);
}
sheetData.AppendChild(row);
}
sheetId++;
wSheetPart.Worksheet.AppendChild(sheetData);
}
}
}
}
}
return FilePath;
}
Alignment alignment0 = new Alignment();
alignment0.WrapText = true;
alignment0.Vertical = VerticalAlignmentValues.Top;
CellFormats cellFormats = new CellFormats(
new CellFormat(new Alignment() { WrapText = true }),// default
new CellFormat { FontId = 0,FillId = 0,BorderId =
1,ApplyBorder = true,Alignment = alignment0,ApplyAlignment = true },//
body
new CellFormat { FontId = 1,FillId = 2,BorderId = 1,ApplyFill
= true,ApplyAlignment = true,} // header
);
非常感谢您的帮助或建议!
解决方法
如果您在创建OpenXml文档时遇到麻烦,那么Open XML SDK Productivity Tool可能非常有用-它可以让您查看实际创建的内容,或者可以检查在Excel(或其他合适的应用程序)中创建的文档
当我进行相同类型的工作时,最初吸引我的一点是XML中元素的顺序很重要,请确保以正确的顺序添加部件-如有疑问,请看一个工作示例。 / p>