实现C#与Excel文件的交互操作,实现以下功能:

1、DataTable 导出到 Excel文件

2、Model数据实体导出到 Excel文件[List<Model>]

3、导出数据到模版

4、多DataTable导入到同一Excel文件

对于第四项功能,常见的用途为:最后一行显示的是百分比,为字符型,而这列其它类型为数据型,如果放在同一个DataTable中,显然不合适。此操作类可实现

5、将Excel文件导入到数据库表中

可以指定每个字段的数据类型

此帮助类的代码量不算少,但注释比较详细,导出数据集中在一个方法,导入数据集中在一个方法。只看完整的两个方法就可以了,其它方法为便于使用所写的辅助简化方法,看看就清楚了:

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Reflection;
using System.Data.OleDb; namespace SOSP.Common
{
/// <summary>
/// C#与Excel交互类
/// </summary>
public class ExcelHelper
{
#region 导出到Excel
#region ExportExcelForDataTable
/// <summary>
/// 从DataTable导出Excel,指定列别名,指定要排除的列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="colName">各列的列名List string </param>
/// <param name="excludeColumn">要显示/排除的列</param>
/// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 例:tp.xlsx 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForDataTable(System.Data.DataTable dt, string excelPathName, string pathType, List<string> colName, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
try
{
if (dt == null || dt.Rows.Count == ) return false;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return false;
}
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = null;
if (TemplatePath == "")
{
workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
}
else
{
workbook = workbooks.Add(TemplatePath); //加载模板
}
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[];
Microsoft.Office.Interop.Excel.Range range; long totalCount = dt.Rows.Count;
if (exDataTableList != null && exDataTableList.Count > )
{
foreach (System.Data.DataTable item in exDataTableList)
{
totalCount += item.Rows.Count;
}
}
long rowRead = ;
float percent = ;
string exclStr = "";//要排除的列临时项
object exclType;//DataTable 列的类型,用于做
int colPosition = ;//列位置
if (sheetName != null && sheetName != "")
{
worksheet.Name = sheetName;
}
#region 列别名判定
if (TemplatePath == "")
{
if (colName != null && colName.Count > )
{
#region 指定了列别名
for (int i = ; i < colName.Count; i++)
{
worksheet.Cells[, i + ] = colName[i];
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ];
range.Interior.ColorIndex = ;
range.Font.Bold = true;
exclType = dt.Columns[i].DataType.Name;
if (exclType.ToString() != "DateTime")
{
//range.EntireColumn.AutoFit();//全局自动调整列宽,不能再使用单独设置
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ]).Columns.AutoFit();
}
else
{
//规定列宽
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ]).Columns.ColumnWidth = ;
}
//((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;
}
#endregion
}
else
{
#region 未指定别名
for (int i = ; i < dt.Columns.Count; i++)
{
worksheet.Cells[, i + ] = dt.Columns[i].ColumnName;
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ];
range.Interior.ColorIndex = ;
range.Font.Bold = true;
exclType = dt.Columns[i].DataType.Name;
if (exclType.ToString() != "DateTime")
{
//range.EntireColumn.AutoFit();//全局自动调整列宽,不能再使用单独设置
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ]).Columns.AutoFit();
}
else
{
//规定列宽
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ]).Columns.ColumnWidth = ;
}
//((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;
}
#endregion
}
}
else
{
//用了模版,不加载标题
}
#endregion
#region 显示/排除列判定
if (excludeColumn != null && excludeColumn.Count > )
{
switch (excludeType)
{
case "":
{
#region 0为显示所有列
#region 常规项
int r = ;
for (r = ; r < dt.Rows.Count; r++)
{
colPosition = ;
for (int i = ; i < dt.Columns.Count; i++)
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = dt.Rows[r][i].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = dt.Rows[r][i].ToString();
}
colPosition++;
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
#endregion
#region 扩展项
if (exDataTableList != null && exDataTableList.Count > )
{
foreach (System.Data.DataTable item in exDataTableList)
{
for (int k = ; k < item.Rows.Count; r++, k++)
{
colPosition = ;
//生成扩展 DataTable 每行数据
for (int t = ; t < item.Columns.Count; t++)
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = item.Rows[k][t].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = item.Rows[k][t].ToString();
}
colPosition++;
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
}
}
#endregion
#endregion
}; break;
case "":
{
#region 1指定的为要显示的列
#region 常规项
int r = ;
for (r = ; r < dt.Rows.Count; r++)
{
colPosition = ;
for (int i = ; i < dt.Columns.Count; i++)
{
exclStr = dt.Columns[i].ColumnName;
if (excludeColumn.Contains(exclStr))
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = dt.Rows[r][i].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = dt.Rows[r][i].ToString();
}
colPosition++;
}
else
{ }
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
#endregion
#region 扩展项
if (exDataTableList != null && exDataTableList.Count > )
{
foreach (System.Data.DataTable item in exDataTableList)
{
for (int k = ; k < item.Rows.Count; r++, k++)
{
colPosition = ;
//生成扩展 DataTable 每行数据
for (int t = ; t < item.Columns.Count; t++)
{
exclStr = dt.Columns[t].ColumnName;
if (excludeColumn.Contains(exclStr))
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = item.Rows[k][t].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = item.Rows[k][t].ToString();
}
colPosition++;
}
else
{ }
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
}
}
#endregion
#endregion
}; break;
case "":
{
#region 2指定的为要排除的列
#region 常规项
int r = ;
for (r = ; r < dt.Rows.Count; r++)
{
colPosition = ;
for (int i = ; i < dt.Columns.Count; i++)
{
exclStr = dt.Columns[i].ColumnName;
if (excludeColumn.Contains(exclStr))
{ }
else
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = dt.Rows[r][i].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = dt.Rows[r][i].ToString();
}
colPosition++;
}
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
#endregion
#region 扩展项
if (exDataTableList != null && exDataTableList.Count > )
{
foreach (System.Data.DataTable item in exDataTableList)
{
for (int k = ; k < item.Rows.Count; r++, k++)
{
colPosition = ;
//生成扩展 DataTable 每行数据
for (int t = ; t < item.Columns.Count; t++)
{
exclStr = dt.Columns[t].ColumnName;
if (excludeColumn.Contains(exclStr))
{ }
else
{
if (TemplatePath == "")
{
worksheet.Cells[r + , colPosition + ] = item.Rows[k][t].ToString();
}
else
{
worksheet.Cells[r + TemplateRow, colPosition + ] = item.Rows[k][t].ToString();
}
colPosition++;
}
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
}
}
#endregion
#endregion
}; break;
default:
break;
} }
else
{
//生成每行数据
int r = ;
for (r = ; r < dt.Rows.Count; r++)
{
//生成每列数据
if (TemplatePath == "")
{
for (int i = ; i < dt.Columns.Count; i++)
{
worksheet.Cells[r + , i + ] = dt.Rows[r][i].ToString();
}
}
else
{
for (int i = ; i < dt.Columns.Count; i++)
{
worksheet.Cells[r + + TemplateRow, i + ] = dt.Rows[r][i].ToString();
}
}
rowRead++;
percent = ((float)( * rowRead)) / totalCount;
}
}
#endregion
switch (pathType)
{
case "": { workbook.Saved = false; }; break;
case "": { workbook.Saved = true; workbook.SaveCopyAs(excelPathName); }; break;
default:
return false;
}
xlApp.Visible = false;//是否在服务器打开
workbook.Close(true, Type.Missing, Type.Missing);
workbook = null;
xlApp.Quit();
xlApp = null;
return true;
}
catch (Exception)
{
return false;
}
} /// <summary>
/// 从DataTable导出Excel,指定列别名
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="colName">各列的列名List string </param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForDataTableC(System.Data.DataTable dt, string excelPathName, string pathType, List<string> colName, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> excludeColumn = new List<string>();
string excludeType = "";
return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
} /// <summary>
/// 从DataTable导出Excel,指定要排除的列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="excludeColumn">要显示/排除的列</param>
/// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForDataTableE(System.Data.DataTable dt, string excelPathName, string pathType, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> colName = new List<string>();
return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
}
/// <summary>
/// 从DataTable导出Excel,使用默认列名,不排除导出任何列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForDataTableZ(System.Data.DataTable dt, string excelPathName, string pathType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> colName = new List<string>();
List<string> excludeColumn = new List<string>();
string excludeType = "";
return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
}
#endregion #region ExportExcelForModelList
/// <summary>
/// 从DataTable导出Excel,指定列别名,指定要排除的列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="colName">各列的列名List string </param>
/// <<param name="excludeColumn">要显示/排除的列</param>
/// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForModelList<T>(List<T> md, string excelPathName, string pathType, List<string> colName, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
System.Data.DataTable dt = ModelListToDataTable(md);
return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
} /// <summary>
/// 从DataTable导出Excel,指定列别名
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="colName">各列的列名List string </param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForModelListC<T>(List<T> md, string excelPathName, string pathType, List<string> colName, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> excludeColumn = new List<string>();
string excludeType = "";
return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
} /// <summary>
/// 从DataTable导出Excel,指定要排除的列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="excludeColumn">要显示/排除的列</param>
/// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForModelListE<T>(List<T> md, string excelPathName, string pathType, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> colName = new List<string>();
return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
} /// <summary>
/// 从DataTable导出Excel,使用默认列名,不排除导出任何列
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>
/// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>
/// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>
/// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>
/// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>
/// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>
/// <returns>bool</returns>
public static bool ToExcelForModelListZ<T>(List<T> md, string excelPathName, string pathType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)
{
List<string> colName = new List<string>();
List<string> excludeColumn = new List<string>();
string excludeType = "";
return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);
}
#endregion #region 从DataTable导出Excel; ToExcelModel实体传参
/// <summary>
/// 从DataTable导出Excel; ToExcelModel实体传参
/// </summary>
/// <param name="tem">ExcelHelper.ToExcelModel</param>
/// <returns></returns>
public static bool ToExcelForDataTable(ToExcelModel tem)
{
if (tem != null)
{
return ToExcelForDataTable(tem.DataTable, tem.excelPathName, tem.pathType, tem.colNameList, tem.excludeColumn, tem.excludeType, tem.sheetName, tem.TemplatePath, tem.TemplateRow, tem.exDataTableList);
}
else
{
return false;
}
}
#endregion #region Model To DataTable
/// <summary>
/// 实体类转换成DataTable
/// </summary>
/// <param name="modelList">实体类列表</param>
/// <returns></returns>
public static System.Data.DataTable ModelListToDataTable<T>(List<T> modelList)
{
System.Data.DataTable dtReturn = new System.Data.DataTable(); // column names
PropertyInfo[] oProps = null; if (modelList == null) return dtReturn; foreach (T rec in modelList)
{
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[];
} dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
} DataRow dr = dtReturn.NewRow(); foreach (PropertyInfo pi in oProps)
{
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
(rec, null);
} dtReturn.Rows.Add(dr);
}
return dtReturn;
}
#endregion #region 说明 如何使用
/*
* 功能:
* 1、将System.Data.DataTable数据导出到Excel文件
* 2、将Model(Entity)数据实体导出到Excel文件
* 完整调用:
* 1、ExcelHelper.ToExcelForDataTable(DataTable,excelPathName,pathType,colName,excludeColumn,excludeType,sheetName,TemplatePath,TemplateRow,exDataTableList);
* 2、ExcelHelper.ToExcelForModelList(Model,excelPathName,pathType,colName,excludeColumn,excludeType,sheetName,TemplatePath,TemplateRow,exDataTableList);
* 参数说明:
* 1、DataTable:DataSet.DataTable[0];数据表
* 2、Model:Model.Users users = new Model.Users(){...};数据实体
* 3、excelPathName:含Excel名称的保存路径 在pathType=1时有效。用户自定义保存路径时请赋值空字符串 ""。格式:"E://456.xlsx"
* 4、pathType:路径类型。只能取值:0用户自定义路径,弹出用户选择路径对话框;1服务端定义路径。标识文件保存路径是服务端指定还是客户自定义路径及文件名,与excelPathName参数合用
* 5、colName:各列的列别名List string,比如:字段名为userName,此处可指定为"用户名",并以此显示
* 6、excludeColumn:要显示/排除的列,指定这些列用于显示,或指定这些列用于不显示。倒低这些列是显示还是不显示,由excludeType参数决定
* 7、excludeType:显示/排除列方式。 0为显示所有列 1指定的是要显示的列 2指定的是要排除的列,与excludeColumn合用
* 8、sheetName:sheet1的名称,要使期保持默认名称请指定为空字符串 ""
* 9、TemplatePath:模版在项目服务器中路径 例:tp.xlsx 。当为空字符串 "" 时表示无模版
* 10、TemplateRow:模版中已存在数据的行数,与TemplatePath合用,无模版时请传入参数 0
* 11、exDataTableList:扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又

调用示例:

导出---

/// <summary>
/// 导出至Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
try
{
BLL.COMMON_UserInfo cu = new BLL.COMMON_UserInfo();
List<Model.COMMON_UserInfo> cuiList = cu.GetModelList("");
BLL.manager_log bll = new BLL.manager_log();
DataSet ds = bll.GetList(, "", "id");
System.Data.DataTable dt = ds.Tables[];
List<string> colName = new List<string>() {
"用户ID",
"用户名",
"备注",
"用户IP",
"操作时间",
"操作时间1",
"操作时间2"
};
List<string> tt = new List<string>() { "action_type" };
DataSet dss = bll.GetList(, "", "id");
List<System.Data.DataTable> dtss = new List<System.Data.DataTable>();
dtss.Add(dss.Tables[]);
dtss.Add(dss.Tables[]);
dtss.Add(dss.Tables[]);
ExcelHelper.ToExcelForDataTable(dt, Server.MapPath("~").ToString() + "456.xlsx", "", colName, tt, "", "", "", , dtss);//指定了列别名,指定了要排除的列
ToExcelModel tem = new ToExcelModel()
{
DataTable = dt,
excelPathName = "",
pathType = "",
colNameList = colName,
excludeColumn = tt,
excludeType = "",
sheetName = "成功",
TemplatePath = "",
TemplateRow = ,
exDataTableList = dtss
};
ExcelHelper.ToExcelForDataTable(tem);
}
catch (Exception ex)
{
FileLog.Log(ex.Message, "ExportExcelByDataTable");
}
}

导入---

/// <summary>
/// 导入数据到数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
string excelFile = "G://123.xls";
string sheetName = "Sheet1";
string DbTableName = "test_new_table";// "test_new_table";
List<string> columnType = new List<string>() {
"int",
"nvarchar(100)",
"decimal(18,2)",
"nvarchar(100)",
"datetime"
};
string connectionString = "server=.;database=Test1;uid=sa;pwd=zhangquan;";
ExcelHelper.FromExcel(excelFile, sheetName, DbTableName, columnType, connectionString);
}

[.Net] C# Excel操作类 ExcelHelper的更多相关文章

  1. C# Excel操作类 ExcelHelper

    实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...

  2. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  3. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  4. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  5. C# Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  6. C#常用工具类——Excel操作类(ZT)

    本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...

  7. C#封装的VSTO Excel操作类

    自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...

  8. C#自定义Excel操作类

    C#自定义Excel操作类,可以用于将DataTable导出到Excel文件,从Excel文件读取数据. using System; using System.IO; using System.Dat ...

  9. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

随机推荐

  1. 金立 M6 (GN8003) 解锁 BootLoader 进入第三方 recovery 刷机 ROOT

    首先下载好工具:http://url.cn/5EILbQn 备用连接 :http://pan.baidu.com/s/1c28j7k0 本篇教程教你如何傻瓜式解锁BootLoader并刷入recove ...

  2. Microsoft Azure Storage Explorer

    上周主管说,要把每次开过的发票,要下载成Pdf的文件,然后就实时的将这些发票存到云上面去. 就是这个Microsoft Azure ,微软的亲儿子. 先把代码贴上来吧,挺简单的. ##.链接账号密码 ...

  3. PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)

    一.部署说明 1.1 实施环境 本文档实验环境如下: PGSQL主机: 192.168.1.45 PGSQL备机: 192.168.1.50 软件和系统版本 Pgsql 版本: pgsql 9.2.4 ...

  4. JAVA 构建使用 Native 库

    Java 使用Native文件,一般分解为下面几个步骤: 在Java代码中使用native关键字声明一个本地方法 运行javah,获得包含该方法声明的C语言头文件(使用jni编程中的C函数名通常是相关 ...

  5. Caffe+Kubuntu16.04_X64+CUDA 8.0配置

    前言: 经过尝试过几次Caffe,theano,MxNet之后,很长时间没有进行caffe的更新,此次在Ubuntu16.04下安装Caffe,折腾了一天时间,终于安装成功. 参考链接:Caffe+U ...

  6. Linux各发行版配置总结

    Ubuntu 14.04(该版本下亲测好用) 1.修改开机启动项和默认启动项 sudo gedit /boot/grub/grub.cfg(修改前最好备份一个) 2.登陆界面图片的修改 /usr/sh ...

  7. Java 并行 (2): Monitor

    转自:http://www.cnblogs.com/tomsheep/archive/2010/06/09/1754419.html 1. 什么是Monitor? Monitor其实是一种同步工具,也 ...

  8. win7下qt+opencv的环境配置

    博客http://blog.csdn.net/qiurisuixiang/article/details/8665278已经完整地介绍了整个环境配置.需要一步不差按原执行.需要说明的是,几个path的 ...

  9. java陷阱之Array.asList

    List<Integer> numbers= Arrays.asList(new Integer[] {1,2,3}); numbers.add(3); 运行这段代码会抛出 java.la ...

  10. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...