在2.3這一版本的更新中,我們迎來了眾多的使用者、貢獻者,在這個里程碑中我們也新增並修復了一些功能。對於新特點的功能我將在下面進行詳細的描述,當然也歡迎更多的人可以加入進來,再或者也很期待大家來提issues或者PR,您的一個issue或者PR將是我們前進的動力。
- 公式匯出 #88
公式匯出目前已經在Excel模板匯出中支援,我們可以通過如上程式碼片段的格式進行將公式應用到我們的Excel匯出模板中.
{{Formula::AVERAGE?params=G4:G6}}
{{Formula::SUM?params=G4:G6&G4}}
- 增加分欄、分sheet、追加rows匯出 #74
在該版本中我們支援使用鏈式程式設計匯出我們的Excel,從而起到追加分欄等作用。
在多個DTO匯出中我們可以通過如下程式碼片段將我們的Excel分欄匯出
exporter.Append(list1).SeparateByColumn().Append(list2).ExportAppendData(filePath);
匯出形式如下所示:
header 1 | header 2 | header1 | |
---|---|---|---|
row 1 col 1 | row 1 col 2 | row1 | |
row 2 col 1 | row 2 col 2 | row2 |
我們還可以通過多個DTO進行多Sheet的匯出,如下程式碼片段所示:
exporter.Append(list1).SeparateBySheet().Append(list2).ExportAppendData(filePath);
當然不僅僅是這樣,我們還可以對行進行追加匯出,同時我們可以選擇匯出額外的Header資訊或者不匯出
exporter.Append(list1).SeparateByRow().Append(list2).ExportAppendData(filePath);
header 1 | header 2 | header1 | |
---|---|---|---|
row 1 col 1 | row 1 col 2 | row1 | |
row 2 col 1 | row 2 col 2 | row2 | |
row 2 col 1 | row 2 col 2 | row2 |
或者我們可以這樣加入Header資訊
exporter.Append(list1).SeparateByRow().AppendHeaders().Append(list2).ExportAppendData(filePath);
header 1 | header 2 | header1 | |
---|---|---|---|
row 1 col 1 | row 1 col 2 | row1 | |
row 2 col 1 | row 2 col 2 | row2 | |
header 1 | header 2 | header1 | |
row 2 col 1 | row 2 col 2 | row2 |
- 新增對ExpandoObject型別的支援#135
特別感謝 sgalcheung 新增該特性的匯出,具體使用方式如下所示:
class Program
{
static async Task Main(string[] args)
{
IExporter exporter = new ExcelExporter();
// 生成測試資料
var personList = GenFu.GenFu.ListOf<Person>();
// 匯出一個只包含"FirstName", "LastName"列的excel
string fields = "FirstName,LastName"; // 可自定義匯出想要的欄位
var expandoObjectList = new List<ExpandoObject>(personList.Count);
var propertyInfoList = new List<PropertyInfo>();
var fieldsAfterSplit = fields.Split(',');
foreach (var field in fieldsAfterSplit)
{
var propertyName = field.Trim();
var propertyInfo = typeof(Person).GetProperty(propertyName);
if (propertyInfo == null)
{
throw new Exception($"Property: {propertyName} 沒有找到:{typeof(Person)}");
}
propertyInfoList.Add(propertyInfo);
}
foreach (var person in personList)
{
var shapedObj = new ExpandoObject();
foreach (var propertyInfo in propertyInfoList)
{
var propertyValue = propertyInfo.GetValue(person);
((IDictionary<string, object>)shapedObj).Add(propertyInfo.Name, propertyValue);
}
expandoObjectList.Add(shapedObj);
}
string filePath = Path.Combine(Directory.GetCurrentDirectory(), "dynamicExportExcel.xlsx");
var result = await exporter.ExportAsByteArray<ExpandoObject>(expandoObjectList);
File.WriteAllBytes(filePath, result);
}
}
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public int Age { get; set; }
public int NumberOfKids { get; set; }
}
感謝大家對Magicodes.IE的支援。關於更多釋出資訊大家可以參閱:https://github.com/dotnetcore/Magicodes.IE/blob/master/RELEASE.md