使用C#将DataTable导出到文件
目录
背景
助手类
创建纯文件内容的扩展方法
创建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 Ahttps://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 <= columnCount; i++){workSheet.Column(i).AutoFit();}return excel;}
}
让我们将代码添加到我们现有的扩展帮助类中。
文件助手
这是一个小的文件/目录/路径帮助程序类。在这里,我们将使用如下方法:
- DeleteFileIfExists(string filePath) 删除文件(如果存在)
- WriteAllText(string filePath, string contents) 在具有特定内容的位置创建一个新文件
using System.IO;public class FileSystemHelper
{/// <summary>/// string p1 = "c:\\temp\\";/// string p2 = "\\subdir\\file\\";/// to c:\temp\subdir\file/// </summary>public static string CombineDirectory(string rootDirectoryPath, string childDirectoryPath){rootDirectoryPath = rootDirectoryPath.TrimEnd('\\');childDirectoryPath = childDirectoryPath.Trim('\\');return Path.Combine(rootDirectoryPath, childDirectoryPath);}/// <summary>/// string p1 = "c:\\temp\\";/// string p2 = "\\file.txt";/// to c:\temp\file.txt/// </summary>public static string CombineFile(string rootDirectoryPath, string filePathOrName){rootDirectoryPath = rootDirectoryPath.TrimEnd('\\');filePathOrName = filePathOrName.Trim('\\');return Path.Combine(rootDirectoryPath, filePathOrName);}public static void CreateDirectoryIfNotExists(string directoryPath){if (!DirectoryExists(directoryPath)){Directory.CreateDirectory(directoryPath);}}public static void DeleteFileIfExists(string filePath){if (FileExists(filePath)){File.Delete(filePath);}}public static bool DirectoryExists(string directoryPath){return Directory.Exists(directoryPath);}public static bool FileExists(string filePath){return File.Exists(filePath);}/*file*/public static void MoveFile(string fromFilePath, string toFilePath){File.Move(fromFilePath, toFilePath);}public static void WriteAllText(string filePath, string contents){/*create file if doesn't exist*/File.WriteAllText(filePath, contents);}
}
其他方法也很有用,因此也请看一看。
使用代码
创建普通文件
在这里,我们正在创建一个CSV文件。
string filePath = @"c:\dataTable.csv";
DataTable dataTable = Data.Instance.DataTable;FileSystemHelper.DeleteFileIfExists(filePath);
FileSystemHelper.WriteAllText(filePath, dataTable.DataTableToFileContent());
要使用其他扩展名(如txt),我们只需将文件名更改为“dataTable.txt ”。
创建Excel文件
在这里,我们正在创建一个XLSX文件。
string filePath = @"c:\dataTable.xlsx";
DataTable dataTable = Data.Instance.DataTable;FileSystemHelper.DeleteFileIfExists(filePath);
using (var excel = dataTable.DataTableToExcel())
{excel.SaveAs(new FileInfo(filePath));
}
我相信XLS也可以,只需更改扩展名并尝试一下即可。
解决方案和项目
它是Visual Studio 2015解决方案和.NET Framework 4.5
局限性
- 列值将使用ToString()方法转换为string。因此,DateTime, decimal, float或其他seminar数据类型会话转到string可能与预期不符。我们需要首先创建一个格式化DataTable对象。
- 列号,顺序或名称也需要预先格式化。
- 这可能不是创建大文件的最有效方法。
下一步是什么?
- 创建XML,doc和pdf文件
- ASP.NET响应示例
使用C#将DataTable导出到文件相关推荐
- DataTable中的数据导出Excel文件
DataTable中的数据导出Excel文件 View Code ///<summary> /// 将DataTable中的数据导出到指定的Excel文件中 ///</summary ...
- asp.net2.0导出pdf文件完美解决方案【月儿原创】
asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.5.28 PDF简介:PDF(P ...
- 通过DataTable导出Excel
//dtData是要导出为Excel的DataTable,FileName是要导出的Excel文件名(不加.xls) private void DataTable2Excel(Syst ...
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- asp.net中通过html格式导出excel文件
//通过html格式生成导出excel文件,下载保存. StreamExport(wgMdcStaff5, fileName, ToDataTable<MdcDrugProcureStock ...
- c html转为datatable,C#中DataTable导出为HTML格式的方法
前言 在C#中DataTable导出数据的时候,我们需要HTML格式的输出数据, 这时候就需要使用将DataTable导出为到HTML格式的方法了,以下代码就可以帮助我们达到目的. 首先,我们要绑定D ...
- C#导入导出.CSV文件
欢迎您成为我的读者,希望这篇文章能给你一些帮助. 前言 大家好,我是阿辉. 今天和大家一起来看看,C#在处理流文件时,我们最常用的导出Excel文件是如何操作的. 在日常的业务编码过程中,很多时候需求 ...
- 将datatable导出为excel的三种方式(转)
一.使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下: 2 publicstaticboolExportExcel(System.Data.Da ...
- 导出csv文件_使用 WeihanLi.Npoi 操作 CSV
Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用,微软的 ml.net 的示例项目 用来训练模型 ...
最新文章
- 在不允许新建对象的条件下,将list中指定条件的值去除
- 使用iText在word文档中插入复杂的Table表格
- 医学教育网批量资源下载程序之——完成
- php发送sql,php发送Sql语句遇到的坑
- win7无法将应用程序锁定到任务栏的几种解决方法
- bzoj1045 糖果传递
- Source Generator 单元测试
- 机器学习算法(4)——SVM(以及拉格朗日对偶问题)
- java中exception作用_java中的异常Exception的划分,以及他们的特性。
- springcloud入门实战进阶百度云,【MyBatis 5(1)
- CStatic控件的基本使用
- 32位的PLSQL登录64位的ORA11g有关问题
- 《机器学习实战》完整总结
- IOTOS物联中台从0到1开发Thales800驱动 实例详解
- Python实现求众数的三种方法
- HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页...
- 分享图片+文字到微信朋友圈
- 解决前后端传送文件名,出现乱码问题,URLEncoder
- Required request body is missing: public com.atguigu.commonutils.
- 【艾琪出品】-【计算机】测试题系列二参考资料
热门文章
- 匿名内部类 可以访问外部类_Java 内部类与外部类的互访使用小结
- popstate_详解HTML5之pushstate、popstate操作history,无刷新改变当前url
- 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
- html5距离底部的距离代码,如何使距离为HTML5
- 不同类型的官网应该如何设计?
- 室内高品质海报框架模型模板(Photoshop PSD)
- datetimepicker 默认时间_Django项目中如何使用日期时间选择器DateTimePicker
- 数据库爬坑MySQL
- nginx documentation | Development guide
- OpenGL学习笔记:画点、直线和多边形(第一讲)