zoukankan
html css js c++ java
从数据库导出数据到word、excel、.txt
using
System;
using
System.Data;
using
System.Drawing;
using
System.Data.SqlClient;
using
Excel;
using
Word;
using
System.IO;
namespace
Common
{
/**/
///
<summary>
///
把数据导入到.doc、.txt、.xls文件中
///
</summary>
public
class
Export
{
private
const
string
DATAWORDPATH
=
@"
C:\folder\doc\datadoc\
"
;
private
const
string
IMAGEWORDPATH
=
@"
C:\folder\doc\imagedoc\
"
;
private
const
string
IMAGEPATH
=
@"
C:\folder\image\
"
;
private
const
string
EXCELPATH
=
@"
C:\folder\excel\
"
;
private
const
string
TXTPATH
=
@"
C:\folder\txt\
"
;
private
const
string
IMAGEPOSTFIX
=
"
.bmp
"
;
private
const
string
WORDPOSTFIX
=
"
.doc
"
;
private
const
string
EXCELPOSTFIX
=
"
.xls
"
;
private
const
string
TXTPOSTFIX
=
"
.txt
"
;
private
const
int
DATADISTANCE
=
5
;
private
const
int
TABDISTANCE
=
8
;
public
Export()
{
//
//
TODO: 在此处添加构造函数逻辑
//
}
/**/
///
<summary>
///
获得数据集Dataset--------------------------------用于调试
///
</summary>
///
<returns>
Dataset
</returns>
public
DataSet GetData()
{
try
{
string
sConnectionString;
sConnectionString
=
"
workstation id=GUOFU;packet size=4096;user id=sa;data source=GUOFU;persist security info=True;initial catalog=YC;password=sc
"
;
SqlConnection objConn
=
new
SqlConnection(sConnectionString);
objConn.Open();
SqlDataAdapter daPoint
=
new
SqlDataAdapter(
"
Select * From Point
"
, objConn);
DataSet dsYC
=
new
DataSet(
"
YC
"
);
daPoint.FillSchema(dsYC,SchemaType.Mapped,
"
Point
"
);
daPoint.Fill(dsYC,
"
Point
"
);
daPoint
=
new
SqlDataAdapter(
"
Select * From Employee
"
, objConn);
daPoint.FillSchema(dsYC,SchemaType.Mapped,
"
Employee
"
);
daPoint.Fill(dsYC,
"
Employee
"
);
return
dsYC;
}
catch
(Exception ex)
{
throw
new
Exception(ex.Message);
}
}
/**/
///
<summary>
///
把数据文件导入到.xls文件
///
</summary>
///
<param name="ds"></param>
public
void
ExportToExcel(DataSet ds)
{
if
(ds.Tables.Count
!=
0
)
{
//
生成.xls文件完整路径名
string
tempFileName
=
GetTempFileName();
object
filename
=
EXCELPATH
+
tempFileName
+
EXCELPOSTFIX;
object
Nothing
=
System.Reflection.Missing.Value;
//
创建excel文件,文件名用系统时间生成精确到毫秒
Excel.Application myExcel
=
new
Excel.ApplicationClass();
myExcel.Application.Workbooks.Add(Nothing);
try
{
//
把Dataset中的数据插入excel文件中
int
totalCount
=
0
;
for
(
int
k
=
0
;k
<
ds.Tables.Count;k
++
)
{
int
row
=
ds.Tables[k].Rows.Count;
int
column
=
ds.Tables[k].Columns.Count;
for
(
int
i
=
0
;i
<
column;i
++
)
{
myExcel.Cells[totalCount
+
2
,
1
+
i]
=
ds.Tables[k].Columns[i].ColumnName;
}
for
(
int
i
=
0
;i
<
row;i
++
)
{
for
(
int
j
=
0
;j
<
column;j
++
)
{
myExcel.Cells[totalCount
+
3
+
i,
1
+
j]
=
"
'
"
+
ds.Tables[k].Rows[i][j].ToString();
}
}
totalCount
=
totalCount
+
row
+
4
;
}
try
{
//
保存excel文件到指定的目录下,文件名用系统时间生成精确到毫秒
myExcel.ActiveWorkbook._SaveAs(filename,Nothing,Nothing,Nothing,Nothing,Nothing,XlSaveAsAccessMode.xlExclusive,Nothing,Nothing,Nothing,Nothing);
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
EXCELPATH
+
tempFileName
+
EXCELPOSTFIX);
return
;
}
//
让生成的excel文件可见
myExcel.Visible
=
true
;
}
catch
(Exception e)
{
System.Windows.Forms.MessageBox.Show(
"
向excel文件中写入数据出错:
"
+
e.Message);
}
}
else
{
System.Windows.Forms.MessageBox.Show(
"
No Data
"
);
}
}
/**/
///
<summary>
///
把数据导入到.doc文件
///
</summary>
///
<param name="ds"></param>
public
void
ExportToWord(DataSet ds)
{
if
(ds.Tables.Count
!=
0
)
{
string
tempFileName
=
null
;
object
filename
=
null
;
object
tableBehavior
=
Word.WdDefaultTableBehavior.wdWord9TableBehavior;
object
autoFitBehavior
=
Word.WdAutoFitBehavior.wdAutoFitFixed;
object
unit
=
Word.WdUnits.wdStory;
object
extend
=
System.Reflection.Missing.Value;
object
breakType
=
(
int
)Word.WdBreakType.wdSectionBreakNextPage;
object
count
=
1
;
object
character
=
Word.WdUnits.wdCharacter;
object
Nothing
=
System.Reflection.Missing.Value;
try
{
tempFileName
=
GetTempFileName();
//
生成.doc文件完整路径名
filename
=
DATAWORDPATH
+
tempFileName
+
WORDPOSTFIX;
//
创建一个word文件,文件名用系统时间生成精确到毫秒
Word.Application myWord
=
new
Word.ApplicationClass();
Word._Document myDoc
=
new
Word.DocumentClass();
myDoc
=
myWord.Documents.Add(
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing);
myDoc.Activate();
//
向把dataset中的表插入到word的文件中
for
(
int
totalTable
=
0
;totalTable
<
ds.Tables.Count;totalTable
++
)
{
myWord.Application.Selection.TypeText(ds.Tables[totalTable].TableName
+
"
表的数据如下
"
);
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.TypeParagraph();
Word.Range para
=
myWord.Application.Selection.Range;
myDoc.Tables.Add(para,ds.Tables[totalTable].Rows.Count
+
1
,ds.Tables[totalTable].Columns.Count,
ref
tableBehavior,
ref
autoFitBehavior);
for
(
int
column
=
0
; column
<
ds.Tables[totalTable].Columns.Count;column
++
)
{
myDoc.Tables.Item(totalTable
+
1
).Cell(
1
,column
+
1
).Range.InsertBefore(ds.Tables[
0
].Columns[column].ColumnName.Trim());
}
for
(
int
row
=
0
;row
<
ds.Tables[totalTable].Rows.Count;row
++
)
{
for
(
int
column
=
0
;column
<
ds.Tables[totalTable].Columns.Count;column
++
)
{
myDoc.Tables.Item(totalTable
+
1
).Cell(row
+
2
,column
+
1
).Range.InsertBefore(ds.Tables[totalTable].Rows[row][column].ToString().Trim());
}
}
myWord.Application.Selection.EndKey(
ref
unit,
ref
extend);
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.InsertBreak(
ref
breakType);
}
myWord.Application.Selection.TypeBackspace();
myWord.Application.Selection.Delete(
ref
character,
ref
count);
myWord.Application.Selection.HomeKey(
ref
unit,
ref
extend);
//
保存word文件到指定的目录下
try
{
myDoc.SaveAs(
ref
filename,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing);
myWord.Visible
=
true
;
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
DATAWORDPATH
+
tempFileName
+
WORDPOSTFIX);
return
;
}
//
让生成的excel文件可见
myWord.Visible
=
true
;
}
catch
(Exception ex)
{
System.Windows.Forms.MessageBox.Show(
"
向word文件中写入数据出错:
"
+
ex.Message);
}
}
else
{
System.Windows.Forms.MessageBox.Show(
"
No Data
"
);
}
}
/**/
///
<summary>
///
把图片文件导入到.doc文件
///
</summary>
///
<param name="bp"></param>
public
void
ExportToWord(Bitmap bp)
{
string
tempFileName
=
null
;
string
bmpPath
=
null
;
object
filename
=
null
;
object
Nothing
=
null
;
tempFileName
=
GetTempFileName();
//
生成.bmp文件完整路径名
bmpPath
=
IMAGEPATH
+
tempFileName
+
IMAGEPOSTFIX;
//
生成.doc文件完整路径名
filename
=
IMAGEWORDPATH
+
tempFileName
+
WORDPOSTFIX;
Nothing
=
System.Reflection.Missing.Value;
//
创建一个word文件,文件名用系统时间生成精确到毫秒
Word.Application myWord
=
new
Word.ApplicationClass();
Word._Document myDoc
=
new
Word.DocumentClass();
myDoc
=
myWord.Documents.Add(
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing);
try
{
//
把bitmap对象保存到系统所生成文件完整路径中
bp.Save(bmpPath);
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
bmpPath);
return
;
}
try
{
//
往word文件中插入图片
myDoc.InlineShapes.AddPicture(bmpPath,
ref
Nothing,
ref
Nothing,
ref
Nothing);
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
bmpPath);
return
;
}
try
{
//
保存word文件到指定的目录下
myDoc.SaveAs(
ref
filename,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing,
ref
Nothing);
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
IMAGEWORDPATH
+
tempFileName
+
WORDPOSTFIX);
return
;
}
//
让生成的word文件可见
myWord.Visible
=
true
;
}
/**/
///
<summary>
///
把数据文件导入到.txt文件
///
</summary>
///
<param name="ds"></param>
public
void
ExportToTxt(DataSet ds)
{
if
(ds.Tables.Count
!=
0
)
{
string
tempFileName
=
null
;
tempFileName
=
GetTempFileName();
//
创建一个.txt文件,文件名用系统时间生成精确到毫秒
FileInfo file
=
new
FileInfo(TXTPATH
+
tempFileName
+
TXTPOSTFIX);
StreamWriter textFile
=
null
;
try
{
textFile
=
file.CreateText();
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
TXTPATH
+
tempFileName
+
TXTPOSTFIX);
return
;
}
//
把Dataset中的数据写入.txt文件中
for
(
int
totaltable
=
0
;totaltable
<
ds.Tables.Count;totaltable
++
)
{
//
统计dataset中当前表的行数
int
row
=
ds.Tables[totaltable].Rows.Count;
//
统计dataset中当前表的列数
int
column
=
ds.Tables[totaltable].Columns.Count;
//
用于统计当前表中每列记录中字符数最长的字符串的长度之和
int
totalLength
=
0
;
//
用于统计标题的长度(dataset中的表名的length+"表的数据如下"的length)
int
titleLength
=
0
;
//
统计每列记录中字符数最长的字符串的长度
int
[] columnLength
=
new
int
[column];
for
(
int
i
=
0
;i
<
column;i
++
)
{
columnLength[i]
=
ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length;
}
for
(
int
i
=
0
;i
<
row;i
++
)
{
for
(
int
j
=
0
;j
<
column;j
++
)
{
if
(ds.Tables[totaltable].Rows[i][j].ToString().Length
>
columnLength[j])
{
columnLength[j]
=
ds.Tables[totaltable].Rows[i][j].ToString().Length;
}
}
}
//
统计当前表中每列记录中字符数最长的字符串的长度之和
for
(
int
i
=
0
;i
<
column;i
++
)
{
totalLength
=
totalLength
+
columnLength[i]
+
DATADISTANCE;
}
totalLength
=
totalLength
+
2
*
TABDISTANCE
-
DATADISTANCE;
//
统计标题的长度(dataset中的当前表名的length+"表的数据如下"的length)
titleLength
=
ds.Tables[totaltable].TableName.ToString().Length
+
"
表的数据如下
"
.Length
*
2
;
//
把标题写入.txt文件中
for
(
int
i
=
0
;i
<
(
int
)((totalLength
-
titleLength)
/
2
);i
++
)
{
textFile.Write(
'
'
);
}
textFile.Write(ds.Tables[totaltable].TableName
+
"
表的数据如下
"
);
textFile.WriteLine();
for
(
int
i
=
0
;i
<
totalLength;i
++
)
{
textFile.Write(
'
*
'
);
}
textFile.WriteLine();
textFile.Write(
"
\t
"
);
//
把dataset中当前表的字段名写入.txt文件中
for
(
int
i
=
0
;i
<
column;i
++
)
{
textFile.Write(ds.Tables[totaltable].Columns[i].ColumnName.ToString());
for
(
int
k
=
0
;k
<
columnLength[i]
-
ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length
+
DATADISTANCE;k
++
)
{
textFile.Write(
'
'
);
}
}
textFile.WriteLine();
for
(
int
i
=
0
;i
<
totalLength;i
++
)
{
textFile.Write(
'
-
'
);
}
textFile.WriteLine();
textFile.Write(
"
\t
"
);
//
把dataset中当前表的数据写入.txt文件中
for
(
int
i
=
0
;i
<
row;i
++
)
{
for
(
int
j
=
0
;j
<
column;j
++
)
{
textFile.Write(ds.Tables[totaltable].Rows[i][j].ToString());
for
(
int
k
=
0
;k
<
columnLength[j]
-
ds.Tables[totaltable].Rows[i][j].ToString().Length
+
DATADISTANCE;k
++
)
{
textFile.Write(
'
'
);
}
}
textFile.WriteLine();
textFile.Write(
"
\t
"
);
}
textFile.WriteLine();
for
(
int
i
=
0
;i
<
totalLength;i
++
)
{
textFile.Write(
'
-
'
);
}
textFile.WriteLine();
textFile.WriteLine();
textFile.WriteLine();
}
//
关闭当前的StreamWriter流
textFile.Close();
System.Windows.Forms.MessageBox.Show(
"
数据文件已保存到
"
+
"
"
+
file.FullName);
}
else
{
System.Windows.Forms.MessageBox.Show(
"
No Data
"
);
}
}
public
string
GetTempFileName()
{
return
DateTime.Now.ToString(
"
yyyyMMddhhmmssfff
"
);
}
}
}
补充:使用以上方法必须对dcom进行配置,给用户使用office的权限。
具体配置方法如下:
1
:在服务器上安装office的Excel软件.
2
:在
"
开始
"
->
"
运行
"
中输入dcomcnfg.exe启动
"
组件服务
"
3
:依次双击
"
组件服务
"
->
"
计算机
"
->
"
我的电脑
"
->
"
DCOM配置
"
4
:在
"
DCOM配置
"
中找到
"
Microsoft Excel 应用程序
"
,在它上面点击右键,然后点击
"
属性
"
,弹出
"
Microsoft Excel 应用程序属性
"
对话框
5
:点击
"
标识
"
标签,选择
"
交互式用户
"
6
:点击
"
安全
"
标签,在
"
启动和激活权限
"
上点击
"
自定义
"
,然后点击对应的
"
编辑
"
按钮,在弹出的
"
安全性
"
对话框中填加一个
"
NETWORK SERVICE
"
用户(注意要选择本计算机名),并给它赋予
"
本地启动
"
和
"
本地激活
"
权限.
7
:依然是
"
安全
"
标签,在
"
访问权限
"
上点击
"
自定义
"
,然后点击
"
编辑
"
,在弹出的
"
安全性
"
对话框中也填加一个
"
NETWORK SERVICE
"
用户,然后赋予
"
本地访问
"
权限.
这样,我们便配置好了相应的Excel的DCOM权限.
注意:我是在WIN2003上配置的,在2000上,是配置ASPNET用户
若不进行配置会出现错误
检索 COM 类工厂中 CLSID 为
{
00024500
-
0000
-
0000
-
C000
-
000000000046
}
的组件时失败,原因是出现以下错误:
80070005
。
原因是用户没有使用Excel的权限。
导出到word同样要配置使用word的权限。
继续补充: 导出到txt我用了上面的方法有问题,
try
{
textFile
=
file.CreateText();
}
catch
{
System.Windows.Forms.MessageBox.Show(
"
系统找不到指定目录下的文件:
"
+
TXTPATH
+
tempFileName
+
TXTPOSTFIX);
return
;
}
查看全文
相关阅读:
弄明白python reduce 函数
Linux 下载百度网盘大文件
java 从网上下载文件的几种方式
Windows下Python2与Python3两个版本共存的方法详解
python 学习笔记
Glide实现查看图片和保存图片到手机
Android Animation 知识点速记备忘思维导图
You must not call setTag() on a view Glide is targeting when use Glide
前端数据流哲学
精读《Optional chaining》
原文地址:https://www.cnblogs.com/newwind521/p/697909.html
最新文章
Windows和Linux下换行的不同
JMeter插件之 BlazeMeter's XMPP----测试Openfire等
用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)
Mysql:执行source sql脚本时,出现:error 2
Linux sftp 另外一台机器时,出现:receive message is too long
Linux的单用户模式
Centos6.5 登录时,提示Module is unkown
Mac下jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限
测试工作的必经之路
Maven虐我千百遍,我待Maven如初恋
热门文章
Maven依赖机制
maven创建web项目
maven之阿里云Maven镜像的使用
maven之pom.xml的配置
maven的配置及使用
数据结构和算法(Java版)快速学习(栈与队列)
数据结构和算法(Java版)快速学习(线性表)
数据结构和算法(Java版)快速学习(交换、选择、插入排序)
数据结构和算法(Java版)快速学习(数组Array)
python项目依赖管理分享迁移后重建开发环境(一)virtualenv 和 pip
Copyright © 2011-2022 走看看