spire.xls 使用记录,List类集合导出到Excel表中
1. 新建excel表
/**新建excel*/ Workbook newBook1 = new Workbook(); newBook1.CreateEmptySheets(1); Worksheet newSheet1 = newBook1.Worksheets[0];
2. 设置样式
/**设置样式*/ newSheet1.AllocatedRange.AutoFitColumns();//列宽自适应 newSheet1.Range[1,1,1, newSheet1.LastColumn].Style.Font.IsBold = true;//首行字体加粗 newSheet1.FreezePanes(2, 1);//首行冻结
3. List<T> 导出到Excel表中
思路:
1. 先将List<T> 转成DataTable数据
2. 利用Attribute将T的属性转成DataTable的列名(不追求中文列名的可以不做)
3. 将DataTable双循环赋值到Excel表中
4. 按照要求更改样式,保存
/// <summary> /// 类集合,导出到Excel,返回excel文件名 /// </summary> /// <typeparam name="T">类</typeparam> /// <param name="tList">List集合</param> /// <param name="filePath">存放文件目录</param> /// <returns>excel文件名</returns> public static string ListToExcel<T>(List<T> tList, string filePath) where T : class, new() { //创建一个Excel文件 try { T t = new T(); Type type = t.GetType(); PropertyInfo[] p_list = type.GetProperties(); FieldInfo[] fieldInfos = type.GetFields(); DataTable dt = new DataTable(); if (p_list != null && p_list.Length > 0) { /**利用attribute将属性转成列名*/ for (int i = 0; i < p_list.Length; i++) { Attribute datareaderattr = p_list[i].GetCustomAttribute(typeof(DataReaderModelAttribute), false); if (datareaderattr != null) { DataReaderModelAttribute dataattr = (DataReaderModelAttribute)datareaderattr; string columName = dataattr.Datareaderfieldname; dt.Columns.Add(columName, Type.GetType("System.String")); } } } /**List数据转DataTable*/ for (int j = 0; j < tList.Count; j++) { DataRow row = dt.NewRow(); T tem = tList[j]; Type jtype = tem.GetType(); PropertyInfo[] j_list = type.GetProperties(); FieldInfo[] jfieldInfos = type.GetFields(); if (j_list != null && j_list.Length > 0) { /**利用循环将List中类的值填到dt中,一行值对应一个类*/ foreach (var item in j_list) { Attribute datareaderattr = item.GetCustomAttribute(typeof(DataReaderModelAttribute), false); if (datareaderattr != null) { DataReaderModelAttribute dataattr = (DataReaderModelAttribute)datareaderattr; row[dataattr.Datareaderfieldname] = item.GetValue(tem, null).ToString(); } } dt.Rows.Add(row); } } /**新建excel*/ Workbook newBook1 = new Workbook(); newBook1.CreateEmptySheets(1); Worksheet newSheet1 = newBook1.Worksheets[0]; /**利用双循环将dt值填到excel表中*/ for (int k = 0; k < dt.Columns.Count; k++) { newSheet1.Range[1, k + 1].Text = dt.Columns[k].ColumnName; for (int z = 0; z < dt.Rows.Count; z++) { newSheet1.Range[z + 2, k + 1].Text = dt.Rows[z][k].ToString(); } } /**设置样式*/ newSheet1.AllocatedRange.AutoFitColumns();//列宽自适应 newSheet1.Range[1,1,1, newSheet1.LastColumn].Style.Font.IsBold = true;//首行字体加粗 newSheet1.FreezePanes(2, 1);//首行冻结 /**保存*/ string strName = @"\Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; string path = filePath + strName; newBook1.SaveToFile(path, ExcelVersion.Version2013); return strName; } catch (Exception ex) { LogTool.ExceptionLog(ex, ex.StackTrace); return ""; } }


浙公网安备 33010602011771号