目录
背景
助手类
创建纯文件内容的扩展方法
创建Excel文件对象的扩展方法
文件助手
使用代码
创建普通文件
创建Excel文件
解决方案和项目
局限性
下一步是什么?
- 下载Vs2015_DatatableToFile-9.2 KB
导出的文件类型是什么?
- 带分隔符的纯文本文件(扩展名为.csv,.txt,.gm等)
- Excel文件(.xls,.xlsx)
使用此扩展名,我们将能够创建普通的文件内容作为一个string,考虑到一个输入DataTable。
扩展方法还具有以下选项:
- 设置分隔符
- 包括列名作为文件标题行
- 处理具有默认值的null值列
- 必要时修剪列值
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
public static class DataTableHelper
{
public static string DataTableToFileContent(this DataTable datatable,
string seperator = ",", bool inchuleColumnName = true,
string defaultNullColumnValue = "", bool trimColumValue = true)
{
/*https://stackoverflow.com/a/28503521 */
if (defaultNullColumnValue == null)
{
throw new NullReferenceException("'defaultNullColumnValue' should not be null");
}
StringBuilder sb = new StringBuilder();
/*header*/
if (inchuleColumnName)
{
for (int i = 0; i < datatable.Columns.Count; i++)
{
sb.Append(datatable.Columns[i]);
if (i < datatable.Columns.Count - 1)
{
sb.Append(seperator);
}
}
sb.AppendLine();
}
/*data*/
long lineNo = 0;
string value;
foreach (DataRow row in datatable.Rows)
{
lineNo++;
if (lineNo > 1)
{
sb.AppendLine();
}
for (int i = 0; i < datatable.Columns.Count; i++)
{
var columnValue = row[i];
value = columnValue == DBNull.Value ?
defaultNullColumnValue : columnValue.ToString();
if (trimColumValue)
{
value = value.Trim();
}
sb.Append(value);
if (i < datatable.Columns.Count - 1)
{
sb.Append(seperator);
}
}
}
return sb.ToString();
}
}
创建Excel文件对象的扩展方法
要创建Excel文件内容,我们使用EPPlus。这是一个很棒的库,具有许多很棒的功能和选项。不幸的是,它从版本5开始不再是免费版本,我们使用的是较低版本的4.5.3.3。
扩展方法还具有以下选项:
- 设置sheet名称
- 包括列名称作为标题,并自动过滤到标题行
- 处理具有默认值的null值列
- 必要时修剪列值
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
public static class DataTableHelper
{
private static string GetExcelColumnName(int columnNumber)
{
/*
1 equal A
https://stackoverflow.com/questions/181596/
how-to-convert-a-column-number-e-g-127-into-an-excel-column-e-g-aa
*/
int dividend = columnNumber;
string columnName = String.Empty;
int modulo;
while (dividend > 0)
{
modulo = (dividend - 1) % 26;
columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
dividend = (int)((dividend - modulo) / 26);
}
return columnName;
}
public static ExcelPackage DataTableToExcel(this DataTable datatable,
string sheetName = "Sheet1", bool inchuleColumnName = true,
string defaultNullColumnValue = null, bool trimColumValue = true)
{
if (String.IsNullOrEmpty(sheetName))
{
throw new NullReferenceException("'sheetName' should not be null or empty");
}
sheetName = sheetName.Trim();
ExcelPackage excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add(sheetName);
int columnCount = datatable.Columns.Count;
int lineNo = 1;
/*header*/
if (inchuleColumnName)
{
int headerNumber = 1;
foreach (DataColumn column in datatable.Columns)
{
workSheet.Cells[lineNo, headerNumber].Value = column.ColumnName;
headerNumber++;
}
workSheet.Row(lineNo).Style.Font.Bold = true;
/*add filter to header*/
workSheet.Cells[String.Format("{0}{1}:{2}{3}", GetExcelColumnName(1),
lineNo, GetExcelColumnName(columnCount), lineNo)].AutoFilter = true;
lineNo++;
}
/*data*/
string value;
foreach (DataRow row in datatable.Rows)
{
for (int i = 0; i < columnCount; i++)
{
var columnValue = row[i];
value = columnValue == DBNull.Value ?
defaultNullColumnValue : columnValue.ToString();
if (trimColumValue && value != null)
{
value = value.Trim();
}
int columnNo = i + 1;
/*https://stackoverflow.com/a/36824090*/
workSheet.Cells[lineNo, columnNo].Value =
string.IsNullOrEmpty(value) ? null : value;
}
lineNo++;
}
for (int i = 1; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录