使用封闭的 XML 编写 excel - 添加自定义列名
Writing a excel using closed XML - adding custom column names
我需要将 object 的列表写到 excel sheet 作为 table,其中每一列代表 object 属性或值.对于下面的方法,我在单独的列表中传递列名,在列表中传递数据 objects,我设法让数据显示如下,但我仍然无法让列正确显示。
我参考了以下文档,但找不到正确显示标题的方法。
https://github.com/closedxml/closedxml/wiki/Inserting-Tables
代码
public string CreateExcelFile<T>(IEnumerable<T> list, string sheetName, string headerTitle, List<string> titles, string fileName, string savedPath)
{
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add(sheetName);
ws.Cell(1, 1).Value = headerTitle; // sets excel sheet header
var rangeTitle = ws.Range(3, 1, 3, titles.Count); // range for row 3, column 1 to row 3, column titles.Count
rangeTitle.AddToNamed("Titles");
// Need to add columns names with in rangeTitle
//rangeTitle.InsertData(titles);
// write data from row 4 onwards
if (list != null && list.Any())
{
ws.Cell(4, 1).InsertData(list);
}
else
{
ws.Cell(4, 1).Value = "No data to show";
}
// styles
var titlesStyle = wb.Style;
titlesStyle.Font.Bold = true;
titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
titlesStyle.Fill.BackgroundColor = XLColor.Amber;
// style titles row
wb.NamedRanges.NamedRange("Titles").Ranges.Style = titlesStyle;
ws.Columns().AdjustToContents();
var filePath = savedPath + string.Format("{0}.xlsx", fileName);
wb.SaveAs(filePath);
return filePath;
}
输出excel
我正在尝试获取输出 - 我需要获取存储在黄色突出显示行的标题中的值。
有人能帮忙吗?
我通过执行以下操作设法让列显示。
// Need to add columns names with in rangeTitle
for (int i = 0; i < titles.Count; i++)
{
var columnNumber = i + 1;
ws.Cell(3, columnNumber).Value = titles[i];
}
这暂时有效。但是,我想知道是否有更好的方法来做事(无需像上面那样手动分配列名)。
ws.Cell(3, 1).Value = new [] { titles };
如果将 Value
设置为数组,ClosedXML 会将数组中的每个 object 写入其自己的行,每列 object 中的一个 属性 . (参见 https://github.com/ClosedXML/ClosedXML/wiki/Copying-IEnumerable-Collections)
在这种情况下,我们传入的数组只有一个 object – 标题数组。该内部数组被写入目标行,并且内部数组中的每个项目都被写入该行中的列。
您可以使用插入Table。数据插入为 Excel Table:
ws.Cell(1, 1).InsertTable(list.AsEnumerable());
我需要将 object 的列表写到 excel sheet 作为 table,其中每一列代表 object 属性或值.对于下面的方法,我在单独的列表中传递列名,在列表中传递数据 objects,我设法让数据显示如下,但我仍然无法让列正确显示。
我参考了以下文档,但找不到正确显示标题的方法。 https://github.com/closedxml/closedxml/wiki/Inserting-Tables
代码
public string CreateExcelFile<T>(IEnumerable<T> list, string sheetName, string headerTitle, List<string> titles, string fileName, string savedPath)
{
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add(sheetName);
ws.Cell(1, 1).Value = headerTitle; // sets excel sheet header
var rangeTitle = ws.Range(3, 1, 3, titles.Count); // range for row 3, column 1 to row 3, column titles.Count
rangeTitle.AddToNamed("Titles");
// Need to add columns names with in rangeTitle
//rangeTitle.InsertData(titles);
// write data from row 4 onwards
if (list != null && list.Any())
{
ws.Cell(4, 1).InsertData(list);
}
else
{
ws.Cell(4, 1).Value = "No data to show";
}
// styles
var titlesStyle = wb.Style;
titlesStyle.Font.Bold = true;
titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
titlesStyle.Fill.BackgroundColor = XLColor.Amber;
// style titles row
wb.NamedRanges.NamedRange("Titles").Ranges.Style = titlesStyle;
ws.Columns().AdjustToContents();
var filePath = savedPath + string.Format("{0}.xlsx", fileName);
wb.SaveAs(filePath);
return filePath;
}
输出excel
我正在尝试获取输出 - 我需要获取存储在黄色突出显示行的标题中的值。
有人能帮忙吗?
我通过执行以下操作设法让列显示。
// Need to add columns names with in rangeTitle
for (int i = 0; i < titles.Count; i++)
{
var columnNumber = i + 1;
ws.Cell(3, columnNumber).Value = titles[i];
}
这暂时有效。但是,我想知道是否有更好的方法来做事(无需像上面那样手动分配列名)。
ws.Cell(3, 1).Value = new [] { titles };
如果将 Value
设置为数组,ClosedXML 会将数组中的每个 object 写入其自己的行,每列 object 中的一个 属性 . (参见 https://github.com/ClosedXML/ClosedXML/wiki/Copying-IEnumerable-Collections)
在这种情况下,我们传入的数组只有一个 object – 标题数组。该内部数组被写入目标行,并且内部数组中的每个项目都被写入该行中的列。
您可以使用插入Table。数据插入为 Excel Table:
ws.Cell(1, 1).InsertTable(list.AsEnumerable());