C#使用NPOI將List數(shù)據(jù)導(dǎo)出到Excel文檔
NPOI是一個(gè)開(kāi)源的C#讀寫(xiě)Excel、WORD等微軟OLE2組件文檔的項(xiàng)目。使用 NPOI 可以在沒(méi)有安裝 Office 或者相應(yīng)環(huán)境的機(jī)器上對(duì) WORD/EXCEL 文檔進(jìn)行讀寫(xiě)。
這里簡(jiǎn)單封裝了一個(gè)使用NPOI導(dǎo)出Excel的DLL,方便項(xiàng)目使用。步驟如下:
1、NuGet包管理器添加對(duì)NPOI和log4net的安裝引用
2、添加Excel屬性信息類(lèi)ExcelProperty.cs
/// <summary>
/// 用于定義導(dǎo)出的excel屬性
/// </summary>
public class ExcelProperty
? ? {
? ? ? ? public ExcelProperty() { }
?
? ? ? ? /// <summary>
? ? ? ? /// 文件基本屬性
? ? ? ? /// </summary>
? ? ? ? /// <param name="company">公司名稱(chēng)</param>
? ? ? ? /// <param name="author">作者信息</param>
? ? ? ? /// <param name="ApplicationName">創(chuàng)建程序信息</param>
? ? ? ? /// <param name="Comments">填加xls文件備注</param>
? ? ? ? /// <param name="title">填加xls文件標(biāo)題信息</param>
? ? ? ? /// <param name="Subject">填加文件主題信息</param>
? ? ? ? public ExcelProperty(string company, string author, string applicationName, string comments, string title, string subject)
? ? ? ? {
? ? ? ? ? ? this.Company = company;
? ? ? ? ? ? this.Author = author;
? ? ? ? ? ? this.ApplicationName = applicationName;
? ? ? ? ? ? this.Comments = comments;
? ? ? ? ? ? this.Title = title;
? ? ? ? ? ? this.Subject = subject;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 公司名稱(chēng)
? ? ? ? /// </summary>
? ? ? ? private string company = "";
? ? ? ? /// <summary>
? ? ? ? /// 公司名稱(chēng)
? ? ? ? /// </summary>
? ? ? ? public string Company
? ? ? ? {
? ? ? ? ? ? get { return company; }
? ? ? ? ? ? set { company = value; }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 作者信息
? ? ? ? /// </summary>
? ? ? ? private string author = "";
? ? ? ? /// <summary>
? ? ? ? /// 作者信息
? ? ? ? /// </summary>
? ? ? ? public string Author
? ? ? ? {
? ? ? ? ? ? get { return author; }
? ? ? ? ? ? set { author = value; }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 創(chuàng)建程序信息
? ? ? ? /// </summary>
? ? ? ? private string applicationName = "";
? ? ? ? /// <summary>
? ? ? ? /// 創(chuàng)建程序信息
? ? ? ? /// </summary>
? ? ? ? public string ApplicationName
? ? ? ? {
? ? ? ? ? ? get { return applicationName; }
? ? ? ? ? ? set { applicationName = value; }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? ///填加xls文件備注
? ? ? ? /// </summary>
? ? ? ? private string comments = "";
? ? ? ? /// <summary>
? ? ? ? ///填加xls文件備注
? ? ? ? /// </summary>
? ? ? ? public string Comments
? ? ? ? {
? ? ? ? ? ? get { return comments; }
? ? ? ? ? ? set { comments = value; }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 填加xls文件標(biāo)題信息
? ? ? ? /// </summary>
? ? ? ? private string title = "";
? ? ? ? /// <summary>
? ? ? ? /// 填加xls文件標(biāo)題信息
? ? ? ? /// </summary>
? ? ? ? public string Title
? ? ? ? {
? ? ? ? ? ? get { return title; }
? ? ? ? ? ? set { title = value; }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 填加文件主題信息
? ? ? ? /// </summary>
? ? ? ? private string subject = "";
? ? ? ? /// <summary>
? ? ? ? /// 填加文件主題信息
? ? ? ? /// </summary>
? ? ? ? public string Subject
? ? ? ? {
? ? ? ? ? ? get { return subject; }
? ? ? ? ? ? set { subject = value; }
? ? ? ? }
? ? }3、添加Excel導(dǎo)出類(lèi)ExcelExportHelper.cs
using log4net;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Reflection;
using System.Text;
?
namespace NPOIExcelExportHelper
{
? ? public class ExcelExportHelper
? ? {
? ? ? ? //委托
? ? ? ? public delegate void ExportResult(bool res);
? ? ? ? public event ExportResult ExportResultEvent;
?
? ? ? ? //構(gòu)造函數(shù)
? ? ? ? public ExcelExportHelper() { }
? ? ? ? public ExcelExportHelper(ILog loghelper)
? ? ? ? {
? ? ? ? ? ? this.LogHelper = loghelper;
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// 日志
? ? ? ? /// </summary>
? ? ? ? private ILog LogHelper;
? ? ? ? /// <summary>
? ? ? ? /// 要導(dǎo)出的Excel對(duì)象
? ? ? ? /// </summary>
? ? ? ? private HSSFWorkbook workbook = null;
? ? ? ? /// <summary>
? ? ? ? /// 要導(dǎo)出的Excel對(duì)象屬性
? ? ? ? /// </summary>
? ? ? ? private HSSFWorkbook Workbook
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (workbook == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? workbook = new HSSFWorkbook();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return workbook;
? ? ? ? ? ? }
? ? ? ? ? ? set { workbook = value; }
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// 設(shè)置Excel文件基本屬性
? ? ? ? /// </summary>
? ? ? ? /// <param name="ep">屬性</param>
? ? ? ? public void SetExcelProperty(ExcelProperty ep)
? ? ? ? {
? ? ? ? ? ? DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
? ? ? ? ? ? dsi.Company = ep.Company;//填加xls文件公司信息
? ? ? ? ? ? Workbook.DocumentSummaryInformation = dsi;
?
? ? ? ? ? ? SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
? ? ? ? ? ? si.Author = ep.Author; //填加xls文件作者信息
? ? ? ? ? ? si.ApplicationName = ep.ApplicationName; //填加xls文件創(chuàng)建程序信息
? ? ? ? ? ? si.Comments = ep.Comments; //填加xls文件備注
? ? ? ? ? ? si.Title = ep.Title; //填加xls文件標(biāo)題信息
? ? ? ? ? ? si.Subject = ep.Subject;//填加文件主題信息
? ? ? ? ? ? si.CreateDateTime = DateTime.Now;
? ? ? ? ? ? Workbook.SummaryInformation = si;
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// 泛型列表List導(dǎo)出到Excel文件
? ? ? ? /// </summary>
? ? ? ? /// <param name="list">源List表</param>
? ? ? ? /// <param name="strHeaderText">標(biāo)題信息</param>
? ? ? ? /// <param name="strFileName">保存路徑</param>
? ? ? ? /// <param name="titles">列名</param>
? ? ? ? public void ExportToFile<T>(List<T> list, string strHeaderText, string strFileName, string[] titles = null)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //轉(zhuǎn)換數(shù)據(jù)源
? ? ? ? ? ? ? ? DataTable dtSource = ListToDataTable(list, titles);
? ? ? ? ? ? ? ? //開(kāi)始導(dǎo)出
? ? ? ? ? ? ? ? Export(dtSource, strHeaderText, strFileName);
? ? ? ? ? ? ? ? System.GC.Collect();
? ? ? ? ? ? ? ? ExportResultEvent?.Invoke(true);
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (LogHelper != null)
? ? ? ? ? ? ? ? ? ? LogHelper.Error(string.Format("ExportToFile error:{0}", ex));
? ? ? ? ? ? ? ? ExportResultEvent?.Invoke(false);
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// DataTable導(dǎo)出到Excel文件
? ? ? ? /// </summary>
? ? ? ? /// <param name="dtSource">源DataTable</param>
? ? ? ? /// <param name="strHeaderText">標(biāo)題信息</param>
? ? ? ? /// <param name="strFileName">保存路徑</param>
? ? ? ? public void Export(DataTable dtSource, string strHeaderText, string strFileName)
? ? ? ? {
? ? ? ? ? ? using (MemoryStream ms = Export(dtSource, strHeaderText))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? byte[] data = ms.ToArray();
? ? ? ? ? ? ? ? ? ? fs.Write(data, 0, data.Length);
? ? ? ? ? ? ? ? ? ? fs.Flush();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// DataTable導(dǎo)出到Excel的MemoryStream
? ? ? ? /// </summary>
? ? ? ? /// <param name="dtSource">源DataTable</param>
? ? ? ? /// <param name="strHeaderText">標(biāo)題信息</param>
? ? ? ? private MemoryStream Export(DataTable dtSource, string strHeaderText)
? ? ? ? {
? ? ? ? ? ? ISheet sheet = Workbook.CreateSheet();
? ? ? ? ? ? ICellStyle dateStyle = Workbook.CreateCellStyle();
? ? ? ? ? ? IDataFormat format = Workbook.CreateDataFormat();
? ? ? ? ? ? dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
?
? ? ? ? ? ? //取得列寬
? ? ? ? ? ? int[] arrColWidth = new int[dtSource.Columns.Count];
? ? ? ? ? ? foreach (DataColumn item in dtSource.Columns)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
? ? ? ? ? ? }
? ? ? ? ? ? for (int i = 0; i < dtSource.Rows.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < dtSource.Columns.Count; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
? ? ? ? ? ? ? ? ? ? if (intTemp > arrColWidth[j])
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? arrColWidth[j] = intTemp;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? int rowIndex = 0;
? ? ? ? ? ? foreach (DataRow row in dtSource.Rows)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? #region 新建表,填充表頭,填充列頭,樣式
? ? ? ? ? ? ? ? if (rowIndex == 65535 || rowIndex == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (rowIndex != 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? sheet = Workbook.CreateSheet();
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? #region 表頭及樣式
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? IRow headerRow = sheet.CreateRow(0);
? ? ? ? ? ? ? ? ? ? ? ? headerRow.HeightInPoints = 25;
? ? ? ? ? ? ? ? ? ? ? ? headerRow.CreateCell(0).SetCellValue(strHeaderText);
?
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle headStyle = Workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? headStyle.Alignment = HorizontalAlignment.Center;
? ? ? ? ? ? ? ? ? ? ? ? IFont font = Workbook.CreateFont();
? ? ? ? ? ? ? ? ? ? ? ? font.FontHeightInPoints = 20;
? ? ? ? ? ? ? ? ? ? ? ? font.Boldweight = 700;
? ? ? ? ? ? ? ? ? ? ? ? headStyle.SetFont(font);
? ? ? ? ? ? ? ? ? ? ? ? headerRow.GetCell(0).CellStyle = headStyle;
? ? ? ? ? ? ? ? ? ? ? ? //CellRangeAddress四個(gè)參數(shù)為:起始行,結(jié)束行,起始列,結(jié)束列
? ? ? ? ? ? ? ? ? ? ? ? sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1));
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? #endregion
?
? ? ? ? ? ? ? ? ? ? #region 列頭及樣式
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? IRow headerRow = sheet.CreateRow(1);
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle headStyle = Workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? headStyle.Alignment = HorizontalAlignment.Center;
? ? ? ? ? ? ? ? ? ? ? ? IFont font = Workbook.CreateFont();
? ? ? ? ? ? ? ? ? ? ? ? font.FontHeightInPoints = 10;
? ? ? ? ? ? ? ? ? ? ? ? font.Boldweight = 700;
? ? ? ? ? ? ? ? ? ? ? ? headStyle.SetFont(font);
? ? ? ? ? ? ? ? ? ? ? ? foreach (DataColumn column in dtSource.Columns)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
? ? ? ? ? ? ? ? ? ? ? ? ? ? headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
? ? ? ? ? ? ? ? ? ? ? ? ? ? //設(shè)置列寬
? ? ? ? ? ? ? ? ? ? ? ? ? ? sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? #endregion
?
? ? ? ? ? ? ? ? ? ? rowIndex = 2;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? #endregion
?
? ? ? ? ? ? ? ? #region 填充內(nèi)容
? ? ? ? ? ? ? ? IRow dataRow = sheet.CreateRow(rowIndex);
? ? ? ? ? ? ? ? foreach (DataColumn column in dtSource.Columns)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ICell newCell = dataRow.CreateCell(column.Ordinal);
? ? ? ? ? ? ? ? ? ? string drValue = row[column].ToString();
? ? ? ? ? ? ? ? ? ? switch (column.DataType.ToString())
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? case "System.String"://字符串類(lèi)型
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue(drValue);
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case "System.DateTime"://日期類(lèi)型
? ? ? ? ? ? ? ? ? ? ? ? ? ? DateTime dateV;
? ? ? ? ? ? ? ? ? ? ? ? ? ? DateTime.TryParse(drValue, out dateV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue(dateV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.CellStyle = dateStyle;//格式化顯示
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case "System.Boolean"://布爾型
? ? ? ? ? ? ? ? ? ? ? ? ? ? bool boolV = false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? bool.TryParse(drValue, out boolV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue(boolV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case "System.Int16"://整型
? ? ? ? ? ? ? ? ? ? ? ? case "System.Int32":
? ? ? ? ? ? ? ? ? ? ? ? case "System.Int64":
? ? ? ? ? ? ? ? ? ? ? ? case "System.Byte":
? ? ? ? ? ? ? ? ? ? ? ? ? ? int intV = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? int.TryParse(drValue, out intV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue(intV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case "System.Decimal"://浮點(diǎn)型
? ? ? ? ? ? ? ? ? ? ? ? case "System.Double":
? ? ? ? ? ? ? ? ? ? ? ? ? ? double doubV = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? double.TryParse(drValue, out doubV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue(doubV);
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case "System.DBNull"://空值處理
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue("");
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? ? ? newCell.SetCellValue("");
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? #endregion
?
? ? ? ? ? ? ? ? rowIndex++;
? ? ? ? ? ? }
? ? ? ? ? ? using (MemoryStream ms = new MemoryStream())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Workbook.Write(ms);
? ? ? ? ? ? ? ? ms.Flush();
? ? ? ? ? ? ? ? ms.Position = 0;
? ? ? ? ? ? ? ? return ms;
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? /// <summary>
? ? ? ? /// 泛型列表List轉(zhuǎn)換為DataTable
? ? ? ? /// </summary>
? ? ? ? /// <typeparam name="T">泛型實(shí)體</typeparam>
? ? ? ? /// <param name="list">要轉(zhuǎn)換的列表</param>
? ? ? ? /// <param name="titles">標(biāo)題</param>
? ? ? ? /// <returns></returns>
? ? ? ? public DataTable ListToDataTable<T>(List<T> list, string[] titles)
? ? ? ? {
? ? ? ? ? ? DataTable dt = new DataTable();
? ? ? ? ? ? Type listType = typeof(T);
? ? ? ? ? ? PropertyInfo[] properties = listType.GetProperties();
? ? ? ? ? ? //標(biāo)題行
? ? ? ? ? ? if (titles != null && properties.Length == titles.Length)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int i = 0; i < properties.Length; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? PropertyInfo property = properties[i];
? ? ? ? ? ? ? ? ? ? dt.Columns.Add(new DataColumn(titles[i], property.PropertyType));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int i = 0; i < properties.Length; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? PropertyInfo property = properties[i];
? ? ? ? ? ? ? ? ? ? dt.Columns.Add(new DataColumn(property.Name, property.PropertyType));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //內(nèi)容行
? ? ? ? ? ? foreach (T item in list)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? DataRow dr = dt.NewRow();
? ? ? ? ? ? ? ? for (int i = 0; i < dt.Columns.Count; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? dr[i] = properties[i].GetValue(item, null);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? dt.Rows.Add(dr);
? ? ? ? ? ? }
? ? ? ? ? ? return dt;
? ? ? ? }
? ? }
}調(diào)用方法:
1、新建一項(xiàng)目,添加對(duì)上述DLL的引用
2、創(chuàng)建TestItem測(cè)試類(lèi)
public class TestItem
? ? {
? ? ? ? public string Name { get; set; }
? ? ? ? public int Id { get; set; }
? ? ? ? public string Date { get; set; }
? ? ? ? public TestItem(string name, int id, string date)
? ? ? ? {
? ? ? ? ? ? Name = name;
? ? ? ? ? ? Id = id;
? ? ? ? ? ? Date = date;
? ? ? ? }
? ? }3、調(diào)用
private void GetList()
? ? ? ? {
? ? ? ? ? ? List<TestItem> list = new List<TestItem>();
? ? ? ? ? ? for (int i = 0; i < 100000; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? list.Add(new TestItem("姓名" + i, i, "2020-04-21"));
? ? ? ? ? ? }
? ? ? ? ? ? ExcelExportHelper exportHelper = new ExcelExportHelper();
? ? ? ? ? ? exportHelper.ExportResultEvent += ExportHelper_ExportResultEvent;
? ? ? ? ? ? exportHelper.SetExcelProperty(new ExcelProperty("TEST", "DNA", "ExcelExport", "", "統(tǒng)計(jì)查詢(xún)", "統(tǒng)計(jì)信息"));
? ? ? ? ? ? exportHelper.ExportToFile(list, "查詢(xún)結(jié)果統(tǒng)計(jì)", @"C:\Test.xls", new string[]{ "姓名", "編號(hào)", "日期"});
? ? ? ? }
?
? ? ? ? private void ExportHelper_ExportResultEvent(bool res)
? ? ? ? {
? ? ? ? ? ? Console.Write(res);
? ? ? ? }4、結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#中將ListView中數(shù)據(jù)導(dǎo)出到Excel的實(shí)例方法
- C#通過(guò)NPOI導(dǎo)入導(dǎo)出數(shù)據(jù)EXCEL
- C#用NPOI導(dǎo)出導(dǎo)入Excel幫助類(lèi)
- C#使用NPOI實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出功能
- C#使用NPOI導(dǎo)入Excel的方法詳解
- c#將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
- C#數(shù)據(jù)導(dǎo)入/導(dǎo)出Excel文件及winForm導(dǎo)出Execl總結(jié)
- C#導(dǎo)入導(dǎo)出EXCEL文件的代碼實(shí)例
- C# Winform實(shí)現(xiàn)導(dǎo)入和導(dǎo)出Excel文件
- C#使用NPOI將excel導(dǎo)入到list的方法
相關(guān)文章
Unity編輯器預(yù)制體工具類(lèi)PrefabUtility常用函數(shù)和用法
這篇文章主要為大家介紹了Unity編輯器預(yù)制體工具類(lèi)PrefabUtility常用函數(shù)及用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
.NET/C# 使用Stopwatch測(cè)量運(yùn)行時(shí)間
這篇文章主要介紹了.NET/C# 使用Stopwatch測(cè)量運(yùn)行時(shí)間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
基于WPF手寫(xiě)一個(gè)簡(jiǎn)單的消息對(duì)話(huà)框
消息對(duì)話(huà)框是UI界面中不可或缺的組成部分,用于給用戶(hù)一些提示,警告或者詢(xún)問(wèn)的窗口,本文將使用WPF手寫(xiě)一個(gè)簡(jiǎn)單的消息對(duì)話(huà)框,感興趣的小伙伴可以了解下2023-12-12
C# paddlerocrsharp識(shí)別身份證號(hào)的實(shí)現(xiàn)示例
paddlerocrsharp可以進(jìn)行圖片識(shí)別,本文主要介紹了C# paddlerocrsharp識(shí)別身份證號(hào)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Unity讀取Excel文件轉(zhuǎn)換XML格式文件
這篇文章主要為大家詳細(xì)介紹了Unity讀取Excel文件轉(zhuǎn)換XML格式文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
異步/多線(xiàn)程/任務(wù)/并行編程之一:如何選擇合適的多線(xiàn)程模型?
本篇文章小編為大家介紹,異步/多線(xiàn)程/任務(wù)/并行編程之一:如何選擇合適的多線(xiàn)程模型?需要的朋友參考下2013-04-04
C#如何優(yōu)雅地取消進(jìn)程的執(zhí)行之Cancellation詳解
本文介紹了.NET框架中的取消協(xié)作模型,包括CancellationToken的使用、取消請(qǐng)求的發(fā)送和接收、以及如何處理取消事件2024-12-12

