把 DataTable 输出到 excel 文件
''' <summary>
''' 把 DataTable 输出到 excel 文件
''' </summary>
''' <param name="dt_datas">DataTable</param>
''' <param name="excelFileName">excel文件名</param>
''' <returns>返回Excel.Worksheet,以便对其进行后续加工</returns>
''' <remarks></remarks>
Public Function datatableToExcel(dt_datas As DataTable, excelFileName As String) As Excel.Worksheet
' 判断这个excel文件是否已经打开了; 如果打开了,不能下载
Try
Dim fs As FileStream = New FileStream(excelFileName, FileMode.OpenOrCreate, FileAccess.Read)
fs.Close()
Catch ex AsException
MessageBox.Show(excelFileName & "文件当前已经打开,请先关闭,否则无法输出")
Return Nothing' 退出
End Try
Dim objArray(dt_datas.Rows.Count + 1, dt_datas.Columns.Count) As Object' 准备写入excel表格 的 二维矩阵
' 第0行: 各列的 列头
For jj = 0 To dt_datas.Columns.Count - 1
'objArray(0, jj) = strHeads(jj).Split(".")(1).ToUpper ' 列头 大写
' 上面以前,由于字段名类似于 a.alert_id 这样,所以对其进行拆分,然后取其后一个,但不能处理 alert_id
' 下面现在,对于 a.alert_id(虽然不大可能出现,但是以防万一) 或者 alert_id ,都可处理; 20191118
Dim ss As String() = dt_datas.Columns(jj).Caption.Split(".")
objArray(0, jj) = ss(ss.Length - 1).ToUpper ' 列头 大写
Next
' 具体数据
For ii = 0 To dt_datas.Rows.Count - 1
For jj = 0 To dt_datas.Columns.Count - 1
'objArray(ii + 1, jj) = dt_datas.Rows(ii).Item(jj).Value.ToString
' 上面是dgv中的写法,下面是 datatable 的写法
objArray(ii + 1, jj) = dt_datas.Rows(ii).Item(jj).ToString
Next
Next
' 上面统计结束,并写入二维矩阵中
' 下面将二维矩阵输出到excel
Dim excelApplication As New Excel.Application
excelApplication.Visible = False
Dim excelWorkBook As Excel.Workbook = excelApplication.Workbooks.Add()
'Dim excelWorkSheet As Excel.Worksheet = excelWorkBook.Worksheets.Add
'excelWorkSheet.Name = "table0" ' 自己定义的表名;注意 Sheet1\Sheet2\Sheet3是excel文件中自带的三个表名,这里由于是增加新表,所以不能用这三个表名
' 如果上面这行代码被屏蔽(就是没有指定表名),则使用 Sheet4 表名
Dim excelWorkSheet As Excel.Worksheet = excelWorkBook.Worksheets(1) ' 用现有的表名 Sheet1 ,注意 Worksheets 是从1开始
' 根据矩阵的大小 设定 excel表格 的 操作区域
Dim range As Microsoft.Office.Interop.Excel.Range = excelWorkSheet.Range("A1").Resize(objArray.GetLength(0), objArray.GetLength(1))
range.NumberFormat = "@"
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignGeneral
range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
range.Value = objArray ' 赋值
'' 设定 excel 的 单元格大小
With excelWorkSheet
.Cells.RowHeight = 20
.Cells.ColumnWidth = 20
End With
Try
excelWorkBook.SaveAs(excelFileName) ' 保存为 excel文件 , 位置根据配置文件
' 这里以excelFileName文件名进行保存,这个文件总是存在的,会弹出一个对话框,问要不要覆盖
' 用户点击对话框的 Yes 按钮,就会把这个文件覆盖掉,然后在 excel 里打开新的文件
Catch ex AsException' 如果出问题
' 这里出问题的原因就是 用户没有点击 Yes 按钮,而是点击了 No 或者 Cancel 按钮
' 此时可以以其他文件名保存
'MessageBox.Show(excelFileName & " 文件现在无法保存,原因:" & ex.ToString() & Chr(10) & Chr(13) & Chr(10) & Chr(13) & "您可以用其它文件名进行保存,请在接下来的输入框中输入文件名")
'MessageBox.Show(excelFileName & " 文件现在无法保存,您可以用其它文件名进行保存,请在接下来的输入框中输入文件名")
' 在excel文件无法保存的情况下,另外保存
Dim SaveFileDialog1 As System.Windows.Forms.SaveFileDialog = New System.Windows.Forms.SaveFileDialog
SaveFileDialog1.CheckFileExists = False' 不检查文件是否已经存在,似乎无用?
' SaveFileDialog1.Filter = "file excel(*.csv)|*.csv"
' 上面以前,以 csv 作为文件名的后缀,不够灵活
' 下面现在,以 输入文件名的后缀 作为文件名的后缀; 20191118
Dim ss As String() = excelFileName.Split("\") ' 获取文件名(去掉路径信息)
Dim sss As String() = ss(ss.Length - 1).Split(".") ' 获取文件名的后缀
SaveFileDialog1.Filter = "file excel(*." & sss(1) & ")|*." & sss(1)
SaveFileDialog1.FilterIndex = 2
SaveFileDialog1.RestoreDirectory = True
If SaveFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then
excelWorkBook.SaveAs(SaveFileDialog1.FileName) ' 重新起个名字保存
End If
End Try
'MessageBox.Show("Download completed!")
excelApplication.Visible = True
' 收集垃圾,关闭进程
ReleaseComObject(excelApplication)
ReleaseComObject(excelWorkBook)
'ReleaseComObject(excelWorkSheet)
Return excelWorkSheet ' 返回 WorkSheet,以便用户对其进行一些后期处理(比如对某些区域上色等等)
End Function
' 收集垃圾
Public Sub ReleaseComObject(ByRef obj AsObject)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex AsException
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
把 DataTable 输出到 excel 文件的更多相关文章
- C# 把datagridview控件上的表格输出到excel文件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- DataTable导入到Excel文件
; saveFileDialog.RestoreDirectory = ; , intIndex] = column.ColumnName; ...
- 把页面的Table直接输出到Excel文件中
有个需求是统计的时候,为生成的html表格提供导出功能,但是这样导出Excel不会显示自身的表格 影响美观,但是excel会显示html的css样式,这里可以通过处理行对象的方式进行导出,但是处理起纵 ...
- java中将从数据库查询的信息输出到excel文件中
package com.cn.peitest.excel; import java.io.File; import java.lang.reflect.Field; import java.util. ...
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- C#实现DataTable转为Excel文件
实现DataTable转为Excel文件,和上次分享的Excel文件转为DataTable互为反操作.DataTable转化为Excel文件是通过传入一个DataTable类型的参数,然后将传入的Da ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)
Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...
- PHP读取Excel文件内容
PHP读取Excel文件内容 项目需要读取Excel的内容,从百度搜索了下,主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel. PHPExcelReader比较 ...
随机推荐
- vue里面路由传参的三种方式
1.方式一 通过query的方式也就是?的方式路径会显示传递的参数 HTML的方式<router-link :to="{name:xxx,query:{page:1,code:8899 ...
- io机制沉思录:分层与管理
io模型的核心是内核kernel与应用(线程)的关系: 内核与应用的联系:数据状态信号和数据本身: 一.分层模型: 应用层——内核层——设备层 https://www.cnblogs.com/feng ...
- MySQL for OPS 05:日志管理
写在前面的话 日志是作为用户排查服务问题的重要依据,在 MySQL 中日志可以分为几类,各自产生着不同的作用.如 error log / bin log / slow log 等.很多时候优化数据库的 ...
- IDEA创建xml文件
今天在用IDEA写项目的时候发现,创建xml文件只能通过File手动输入去创建,但在我看的一个学习视频上可以直接创建xml文件,好奇之下研究了一下,作此篇,希望能对需要的朋友有所帮助. 废话就不多说了 ...
- 端口快速扫描程序(c#版 一次可发起1000个连接)
前言 为了探测本机或对方开放了哪些端口,需要用到端口扫描程序.扫描端口的原理很简单:就是尝试连接对方:如果成功,对方就开放了此端口.扫描程序的关键是速度,如果一次只能发起几个连接,显然速度太慢.如果对 ...
- C#: 解决Fody is only supported on MSBuild 16 and above
背景信息: 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,在拷贝给到别人使用 ...
- jmeter入门操作 = 录制
没安装工具的朋友请先看:https://www.cnblogs.com/cainiaoxiansheng/p/11007754.html 软件装好,功能了解好,那么就开始进入正题,先来一波录制 不要鄙 ...
- springcloud分布式事务Atomikos实例
0.JTA(Java Transaction Manager)的介绍 (1)jta与jdbc 简单的说 jta是多库的事务 jdbc是单库的事务 (2)XA与JTA XA : XA是一个规范或是一个事 ...
- JAVA性能监控与调优参考文档链接
JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...
- [b0016] python 归纳 (二)_静态方法和类方法
# -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...