[英]C# export datatable to excel spreadsheet *object reference not set to an instance of an object
[英]How do I export a C# object list to an excel spreadsheet?
我有一個從Excel電子表格創建的C#列表,我想將其導出到Excel。 我怎樣才能完成這項任務? 這只是一個控制台項目。 我不打算在.Net應用程序中顯示數據。 我只需要電子表格。
var fileName = string.Format("C:\\Users\\SGurmu\\Desktop\\Data 091510.xls");
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var fileName2 = string.Format("C:\\Users\\SGurmu\\Desktop\\Copy of Prototype.xls");
var connectionString2 = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "contacts");
var data = ds.Tables["contacts"].AsEnumerable();
List<EmployeeData> query = data.Where(x => x.Field<string>("First_Name") != string.Empty).Select(x =>
new EmployeeData
{
empID = x.Field<double>("EMPLOYEE"),
firstName = x.Field<string>("First_Name"),
lastName = x.Field<string>("Last_Name"),
JobCategory = x.Field<string>("Job Title"),
StartDate = x.Field<Nullable<DateTime>>("Hire Dt"),
EndDate = x.Field<Nullable<DateTime>>("Term Dt"),
TermReason = x.Field<string>("Term Reason"),
PeggedUID = x.Field<Nullable<double>>("Pegged UserID"),
UpdateDate = x.Field<Nullable<DateTime>>("Last Updated")
}).ToList();
using ClosedXML.Excel;
添加using ClosedXML.Excel;
到類文件的頂部。 ToExcelFile方法
public static bool ToExcelFile(this DataTable dt, string filename)
{
bool Success = false;
//try
//{
XLWorkbook wb = new XLWorkbook();
wb.Worksheets.Add(dt, "Sheet 1");
if (filename.Contains("."))
{
int IndexOfLastFullStop = filename.LastIndexOf('.');
filename = filename.Substring(0, IndexOfLastFullStop) + ".xlsx";
}
filename = filename + ".xlsx";
wb.SaveAs(filename);
Success = true;
//}
//catch (Exception ex)
//{
//ex.HandleException();
//}
return Success;
}
將列表轉換為DataTable
public static DataTable ToDataTable(List<string> list)
{
DataTable MethodResult = null;
DataTable dt = new DataTable();
dt.Columns.Add("Item", );
foreach(string s in list)
{
DataRow dr = dt.NewRow();
dr[0] = s;
dt.Rows.Add(dr);
}
dt.AcceptChanges();
MethodResult = dt;
return MethodResult;
}
也許你可以嘗試使用Nuget中托管的Infodinamica.Framework.Expotable包。
有了它,你可以做這樣的事情
List<EmployeeData> query = data.Where(x => x.Field<string>("First_Name") != string.Empty).Select(x =>
new EmployeeData
{
empID = x.Field<double>("EMPLOYEE"),
firstName = x.Field<string>("First_Name"),
lastName = x.Field<string>("Last_Name"),
JobCategory = x.Field<string>("Job Title"),
StartDate = x.Field<Nullable<DateTime>>("Hire Dt"),
EndDate = x.Field<Nullable<DateTime>>("Term Dt"),
TermReason = x.Field<string>("Term Reason"),
PeggedUID = x.Field<Nullable<double>>("Pegged UserID"),
UpdateDate = x.Field<Nullable<DateTime>>("Last Updated")
}).ToList();
IExportEngine engine = new ExcelExportEngine();
engine.AddData(EmployeeData);
MemoryStream memory = engine.Export();
您可以使用nuget命令安裝:
Install-Package Infodinamica.Framework.Exportable
唯一的問題,文件是西班牙語。
項目頁面在這里
出口示例(西班牙語)在這里
它還可以在此處啟用導入文件(西班牙語)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.