博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将 List<Obj> 集合, 导出至 Excel
阅读量:5059 次
发布时间:2019-06-12

本文共 5143 字,大约阅读时间需要 17 分钟。

主代码在这:

黑人老外写的代码,条理很清晰。

↓ 用法:(由于我直接就是用List泛型集合,就不新定义一个集合对象了,所以封装了下:)

private void Export2Excel
(IEnumerable
pValues) where T : class{ var saveE = new ExportToExcel
>(); saveE.DataToPrint = pValues.ToList(); saveE.GenerateReport();}

↓ 稍微封装下,用起来就更简单了,一句就完了

//比如,我有个音乐集合//List
sourcesExport2Excel(sources);

看起来真的好爽,一句就完了,贴一下老外的代码吧。

//ExportToExcel
s = new ExportToExcel
(); //ICollectionView view = CollectionViewSource.GetDefaultView(dgBook.ItemsSource); //s.DataToPrint = (Books)view.SourceCollection; //s.GenerateReport(); ///
/// 导出 Excel 类,(带示例) /// ///
///
public class ExportToExcel
where T : class where U : List
{ public List
DataToPrint; // Excel 对象实例. private Excel.Application _excelApp = null; private Excel.Workbooks _books = null; private Excel._Workbook _book = null; private Excel.Sheets _sheets = null; private Excel._Worksheet _sheet = null; private Excel.Range _range = null; private Excel.Font _font = null; // 可选 参数 private object _optionalValue = Missing.Value; ///
/// 生成报表,和其他功能 /// public void GenerateReport() { try { if (DataToPrint != null) { if (DataToPrint.Count != 0) { Mouse.SetCursor(Cursors.Wait); CreateExcelRef(); FillSheet(); OpenReport(); Mouse.SetCursor(Cursors.Arrow); } } } catch (Exception e) { MessageBox.Show("Excel导出失败!\n", e.Message); } finally { ReleaseObject(_sheet); ReleaseObject(_sheets); ReleaseObject(_book); ReleaseObject(_books); ReleaseObject(_excelApp); } } ///
/// 展示 Excel 程序 /// private void OpenReport() { _excelApp.Visible = true; } ///
/// 填充 Excel sheet /// private void FillSheet() { object[] header = CreateHeader(); WriteData(header); } ///
/// 将数据写入 Excel sheet /// ///
private void WriteData(object[] header) { object[,] objData = new object[DataToPrint.Count, header.Length]; for (int j = 0; j < DataToPrint.Count; j++) { var item = DataToPrint[j]; for (int i = 0; i < header.Length; i++) { var y = typeof(T).InvokeMember(header[i].ToString(), BindingFlags.GetProperty, null, item, null); objData[j, i] = (y == null) ? "" : y.ToString(); } } AddExcelRows("A2", DataToPrint.Count, header.Length, objData); AutoFitColumns("A1", DataToPrint.Count + 1, header.Length); } ///
/// 根据数据拟合 列 /// ///
///
///
private void AutoFitColumns(string startRange, int rowCount, int colCount) { _range = _sheet.get_Range(startRange, _optionalValue); _range = _range.get_Resize(rowCount, colCount); _range.Columns.AutoFit(); } ///
/// 根据属性名创建列标题 /// ///
private object[] CreateHeader() { PropertyInfo[] headerInfo = typeof(T).GetProperties(); // 为 标头 创建 Array // 开始从 A1 处添加 List
objHeaders = new List(); for (int n = 0; n < headerInfo.Length; n++) { objHeaders.Add(headerInfo[n].Name); } var headerToAdd = objHeaders.ToArray(); AddExcelRows("A1", 1, headerToAdd.Length, headerToAdd); SetHeaderStyle(); return headerToAdd; } /// /// 列标题设置为加粗字体 /// private void SetHeaderStyle() { _font = _range.Font; _font.Bold = true; } /// /// 添加行 /// /// /// /// /// private void AddExcelRows(string startRange, int rowCount, int colCount, object values) { _range = _sheet.get_Range(startRange, _optionalValue); _range = _range.get_Resize(rowCount, colCount); _range.set_Value(_optionalValue, values); } /// /// 创建 Excel 传递的参数实例 /// private void CreateExcelRef() { _excelApp = new Excel.Application(); _books = (Excel.Workbooks)_excelApp.Workbooks; _book = (Excel._Workbook)(_books.Add(_optionalValue)); _sheets = (Excel.Sheets)_book.Worksheets; _sheet = (Excel._Worksheet)(_sheets.get_Item(1)); } /// /// 释放未使用的 COM 对象 /// /// private void ReleaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show(ex.Message.ToString()); } finally { GC.Collect(); } } }
主代码

 

转载于:https://www.cnblogs.com/3Tai/p/3738297.html

你可能感兴趣的文章
html5学习笔记(html5的基本构成)
查看>>
Codeforces 862C 异或!
查看>>
sscanf的应用
查看>>
第二篇 Python初识别及变量名定义规范
查看>>
springMVC全局Exception异常处理SimpleMappingExceptionResolver
查看>>
Apollo 1 融合 Spring 的三个入口
查看>>
ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
查看>>
2015 Multi-University Training Contest 5
查看>>
8.14-T1村通网(pupil)
查看>>
Chrome 中的 JavaScript 断点设置和调试技巧
查看>>
js 冒泡型事件
查看>>
“卷积神经网络(Convolutional Neural Network,CNN)”之问
查看>>
Markdown入门语法
查看>>
团队电梯演讲视频
查看>>
bzoj1901
查看>>
Noip 2016
查看>>
实现多行显示省略号和兼容的解决办法
查看>>
Leetcode: Insert Delete GetRandom O(1)
查看>>
docker 私有仓库之Harbor搭建与使用
查看>>
Android(Linux) 网卡名修改
查看>>