目录

背景

助手类

创建纯文件内容的扩展方法

创建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导出到文件相关推荐

  1. DataTable中的数据导出Excel文件

    DataTable中的数据导出Excel文件 View Code ///<summary> /// 将DataTable中的数据导出到指定的Excel文件中 ///</summary ...

  2. asp.net2.0导出pdf文件完美解决方案【月儿原创】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.28 PDF简介:PDF(P ...

  3. 通过DataTable导出Excel

    //dtData是要导出为Excel的DataTable,FileName是要导出的Excel文件名(不加.xls)         private void DataTable2Excel(Syst ...

  4. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  5. asp.net中通过html格式导出excel文件

    //通过html格式生成导出excel文件,下载保存.   StreamExport(wgMdcStaff5, fileName, ToDataTable<MdcDrugProcureStock ...

  6. c html转为datatable,C#中DataTable导出为HTML格式的方法

    前言 在C#中DataTable导出数据的时候,我们需要HTML格式的输出数据, 这时候就需要使用将DataTable导出为到HTML格式的方法了,以下代码就可以帮助我们达到目的. 首先,我们要绑定D ...

  7. C#导入导出.CSV文件

    欢迎您成为我的读者,希望这篇文章能给你一些帮助. 前言 大家好,我是阿辉. 今天和大家一起来看看,C#在处理流文件时,我们最常用的导出Excel文件是如何操作的. 在日常的业务编码过程中,很多时候需求 ...

  8. 将datatable导出为excel的三种方式(转)

    一.使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下: 2 publicstaticboolExportExcel(System.Data.Da ...

  9. 导出csv文件_使用 WeihanLi.Npoi 操作 CSV

    Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用,微软的 ml.net 的示例项目 用来训练模型 ...

最新文章

  1. 在不允许新建对象的条件下,将list中指定条件的值去除
  2. 使用iText在word文档中插入复杂的Table表格
  3. 医学教育网批量资源下载程序之——完成
  4. php发送sql,php发送Sql语句遇到的坑
  5. win7无法将应用程序锁定到任务栏的几种解决方法
  6. bzoj1045 糖果传递
  7. Source Generator 单元测试
  8. 机器学习算法(4)——SVM(以及拉格朗日对偶问题)
  9. java中exception作用_java中的异常Exception的划分,以及他们的特性。
  10. springcloud入门实战进阶百度云,【MyBatis 5(1)
  11. CStatic控件的基本使用
  12. 32位的PLSQL登录64位的ORA11g有关问题
  13. 《机器学习实战》完整总结
  14. IOTOS物联中台从0到1开发Thales800驱动 实例详解
  15. Python实现求众数的三种方法
  16. HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页...
  17. 分享图片+文字到微信朋友圈
  18. 解决前后端传送文件名,出现乱码问题,URLEncoder
  19. Required request body is missing: public com.atguigu.commonutils.
  20. 【艾琪出品】-【计算机】测试题系列二参考资料

热门文章

  1. 匿名内部类 可以访问外部类_Java 内部类与外部类的互访使用小结
  2. popstate_详解HTML5之pushstate、popstate操作history,无刷新改变当前url
  3. 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
  4. html5距离底部的距离代码,如何使距离为HTML5
  5. 不同类型的官网应该如何设计?
  6. 室内高品质海报框架模型模板(Photoshop PSD)
  7. datetimepicker 默认时间_Django项目中如何使用日期时间选择器DateTimePicker
  8. 数据库爬坑MySQL
  9. nginx documentation | Development guide
  10. OpenGL学习笔记:画点、直线和多边形(第一讲)