public static bool ListToExcel<T>(List<T> list, string filePath, bool isShowExcle = true)
{
int rowCount = list.Count;
//int columnCount = new T().GetType().GetMembers().Length;
if (rowCount == 0)
{
return false;
}
//建立Excel对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workBook = excel.Application.Workbooks.Add(true);
excel.Visible = false;//是否打开该Excel文件
excel.Cells.ColumnWidth = 16;//设置单元格宽
excel.Cells.NumberFormatLocal = "@";//设置所有单元格式
int colHead = 0;
foreach (var mi in typeof(T).GetMembers())
{
if (mi.MemberType == MemberTypes.Field)
{
colHead++;
excel.Cells[1, colHead] = mi.Name;
}
}
int row = 1;
foreach (var model in list)
{
row++;
int col = 0;
foreach (var mi in model.GetType().GetMembers())
{
if (mi.MemberType == MemberTypes.Field)
{
col++;
excel.Cells[row, col] = (mi as FieldInfo).GetValue(model);
}
}
}
workBook.SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
try
{
workBook.Saved = true;
excel.UserControl = false;
}
catch (Exception ex)
{
Log.Writer(ex, "ListToExcel异常");
return false;
}
finally
{
workBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlSaveChanges, Missing.Value, Missing.Value);
excel.Quit();
}
if (isShowExcle)
{
System.Diagnostics.Process.Start(filePath);
}
return true;
}
public static DataSet ExcelToDT(string path, bool addNo = true, string sheetName = "sheet1$")
{
try
{
//string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "Extended Properties=Excel 8.0;";
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + path + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = string.Format("select * from [{0}]", sheetName);
DataSet ds = new DataSet();
if (addNo)
{
DataTable dt = new DataTable();
dt.TableName = "table1";
dt.Columns.Add("SerialNo");
ds.Tables.Add(dt);
}
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, "table1");
if (addNo)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ds.Tables[0].Rows[i]["SerialNo"] = i + 1;
}
}
return ds;
}
catch (Exception e)
{
throw e;
}
}
//只支持属性
public static List<T> ExcelToT<T>(string path, bool addNo = true, string sheetName = "sheet1$") where T : class, new()
{
try
{
var ds = ExcelToDT(path, addNo, sheetName);
if (ds == null)
{
return null;
}
List<T> listResult = new List<T>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
T m = new T();
foreach (DataColumn col in ds.Tables[0].Columns)
{
var p = m.GetType().GetProperties().FirstOrDefault(pi => pi.Name.Equals(col.ColumnName));
if (p != null)
p.SetValue(m, dr[col], null);
//var fieldInfo = m.GetType().GetFields().FirstOrDefault(mi => mi.Name == col.ColumnName && mi.MemberType == MemberTypes.Field);
//if (fieldInfo != null)
// fieldInfo.SetValue(m, Convert.ToString(dr[col]));
}
listResult.Add(m);
}
return listResult;
}
catch (Exception e)
{
throw e;
}
}