一、word
这是我以前工作时写过的一个业务逻辑处理类,里面有不少文件操作的方法,这里主要关注一下C#对word的操作。里面的方法可以直接拿出来用,主要是通过word的dot模版来进行创建word、替换word等操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
namespace
Excel2Word
{
public
class
BLL
{
private
Microsoft.Office.Interop.Word.Application app =
null
;
//全局变量 word应用程序
/// <summary>
/// 从Excel中读取数据
/// </summary>
/// <param name="excelPath"></param>
/// <param name="sheetName"></param>
/// <returns></returns>
public
static
DataSet GetDataFromExcel(
string
excelPath,
string
sheetName)
{
DataSet ds =
new
DataSet();
string
strConn =
"Provider=Microsoft.Jet.OleDb.4.0; Data Source="
+ excelPath.ToString().Trim() +
"; Extended Properties=Excel 8.0;"
;
try
{
using
(OleDbConnection conn =
new
OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter oda =
new
OleDbDataAdapter(
"select * from ["
+ sheetName +
"]"
, conn);
oda.Fill(ds);
}
}
catch
{
throw
new
Exception(
"获取Excel数据时发生异常..."
);
}
return
ds;
}
/// <summary>
/// Word文本替换
/// </summary>
/// <param name="doc">文档</param>
/// <param name="args">要替换的内容</param>
public
void
ReplaceWord(Document doc, Dictionary<
string
,
string
> args)
{
try
{
object
first = 0;
object
last = doc.Characters.Count;
Range range = doc.Range(
ref
first,
ref
last);
Microsoft.Office.Interop.Word.Find finder = range.Find;
finder.ClearFormatting();
object
missingValue = Type.Missing;
object
replaceArea = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
foreach
(
var
item
in
args)
{
object
findStr =
"{"
+ item.Key.Trim() +
"}"
;
object
replaceStr = item.Value.Trim();
//替换内容
finder.Execute(
ref
findStr,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
replaceStr,
ref
replaceArea,
ref
missingValue,
ref
missingValue,
ref
missingValue,
ref
missingValue);
}
}
catch
{
return
;
}
}
/// <summary>
/// word文档资源释放
/// </summary>
/// <param name="doc">要释放资源的文档</param>
public
void
DisposeWord(Document doc)
{
try
{
object
oMissing = System.Reflection.Missing.Value;
if
(doc !=
null
)
{
//关闭Word并回收资源
doc.Close(
ref
oMissing,
ref
oMissing,
ref
oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
doc =
null
;
}
if
(app !=
null
)
{
app.Quit(
ref
oMissing,
ref
oMissing,
ref
oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app =
null
;
GC.Collect();
}
}
catch
{
return
;
}
}
/// <summary>
/// 从模板创建Word文件
/// </summary>
/// <param name="fileName">模板位置及名称</param>
/// <returns></returns>
public
Document CreateWord(
string
fileName,
string
dsr)
{
try
{
app =
new
Microsoft.Office.Interop.Word.Application();
//打开word程序
Document doc =
new
Document();
//创建word对象
object
unknow = Type.Missing;
string
date = DateTime.Now.ToShortDateString();
object
savefilename =
@"D:\"
+ dsr + ".doc";
//保存路径
object
File = fileName;
app.Visible =
false
;
//设置word程序为不可见
doc = app.Documents.Open(
ref
File,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow);
//打开word文档
doc.SaveAs(
ref
savefilename,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow,
ref
unknow);
//保存word文档
return
doc;
}
catch
{
return
null
;
}
}
}
}
|
二、excel
webform中,导出excel的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
void
ExportResult(DataTable dt,
string
excelName)
{
Response.Clear();
Response.Charset =
""
;
Response.ContentType =
"applicationnd.ms-xls"
;
StringWriter sw =
new
StringWriter();
HtmlTextWriter htmlWrite =
new
HtmlTextWriter(sw);
DataGrid dg =
new
DataGrid();
dg.DataSource = dt;
dg.DataBind();
dg.RenderControl(htmlWrite);
Response.AddHeader(
"content-disposition"
,
"attachment;filename="
+ HttpUtility.UrlEncode(excelName));
Response.Write(sw.ToString());
Response.End();
}
|
如果遇到身份证等类型的字段,由于科学计数法的原因导出excel之后很可能会“截断”,因此有必要对这种长整型的字段进行处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/// <summary>
/// 过滤低位非打印字符
/// </summary>
/// <param name="tmp"></param>
/// <returns></returns>
private
string
ReplaceLowOrderASCIICharacters(
string
tmp)
{
StringBuilder info =
new
StringBuilder();
foreach
(
char
cc
in
tmp)
{
int
ss = (
int
)cc;
if
(((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
info.AppendFormat(
" "
, ss);
else
info.Append(cc);
}
return
info.ToString();
}
|
winform中,客户端生成excel的代码:
前提是要安装office,原理是通过office进程生成excel文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/// <summary>
/// 从DataSet生成Excel
/// </summary>
/// <param name="ds">DataSet</param>
/// <param name="strExcelFileName">文件名</param>
public
void
ExportExcelByDataSet(DataSet ds,
string
strExcelFileName)
{
Microsoft.Office.Interop.Excel.Application excel =
new
Microsoft.Office.Interop.Excel.Application();
int
rowIndex = 1;
int
colIndex = 0;
excel.Application.Workbooks.Add(
true
);
DataTable dt = ds.Tables[0];
foreach
(DataColumn col
in
dt.Columns)
{
colIndex++;
excel.Cells[1, colIndex] = col.ColumnName;
}
foreach
(DataRow row
in
dt.Rows)
{
rowIndex++;
colIndex = 0;
foreach
(DataColumn col
in
dt.Columns)
{
colIndex++;
excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
}
excel.Visible =
false
;
excel.ActiveWorkbook.SaveAs(strExcelFileName +
".XLS"
, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795,
null
,
null
,
false
,
false
, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
null
,
null
,
null
,
null
,
null
);
excel.Quit();
excel =
null
;
GC.Collect();
}
|
三、pdf
搜索《PDF文件制作全攻略》,可以找到现成的资料,里面的代码和文档也相对比较齐全、清晰,这里简单做个示例demo——生成一个带章节的,内容为图片的pdf文档。
实现步骤:
1)在vs环境下新建项目,引用 ICSharpCode.SharpZipLib.dll、itextsharp.dll 这两个dll文件
2)在按钮事件下输入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//设置版面为A4大小
Document document =
new
Document(PageSize.A4);
//创建一个test.pdf文件
PdfWriter.getInstance(document,
new
FileStream(
"test.pdf"
, FileMode.Create));
document.Open();
//打开pdf文档
try
{
string
[] images = Directory.GetFiles(
"test/"
);
for
(
int
i = 0; i < images.Length; i++)
{
//定义章节
Chapter chapter =
new
Chapter(
new
Paragraph(images[i]), i + 1);
//加入章节
document.Add(chapter);
//获得图片
iTextSharp.text.Image tempImage = iTextSharp.text.Image.getInstance(images[i]);
//设置图片大小为原图的70%
tempImage.scalePercent(70);
//文档加入图片
document.Add(tempImage);
//文档新建一页
document.newPage();
}
}
catch
(Exception ex)
{
throw
ex;
}
document.Close();
//关闭pdf文档
|
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1345979