asp.net(C#)套用模板操作Excel
当需要输出带大量公式的Excel文档的时候,在代码里写公式就太累了。
用设计好的Excel模板,复制一下,往里面添加数据比较省事。
模板

导出文件:

大气象
用设计好的Excel模板,复制一下,往里面添加数据比较省事。
模板
导出文件:
大气象
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Reflection;
using Microsoft.Office.Interop.Excel;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
Bind();
}
private void Bind()
{
//模板文件
string TempletFileName = Server.MapPath("template/") + "template.xlsx";
//导出文件
string ReportFileName = Server.MapPath("xls/") + "out.xlsx";
string strTempletFile = Path.GetFileName(TempletFileName);
//将模板文件复制到输出文件
FileInfo mode = new FileInfo(TempletFileName);
mode.CopyTo(ReportFileName, true);
//打开excel
object missing = Missing.Value;
Application app = null;
Workbook wb = null;
Worksheet ws = null;
Range r = null;
//
app = new Microsoft.Office.Interop.Excel.Application();
wb = app.Workbooks.Open(ReportFileName, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
app.Visible = true;
//得到WorkSheet对象
ws = (Worksheet)wb.Worksheets.get_Item(1);
//添加或修改WorkSheet里的数据
ws.Cells[1, 1] = "100";
ws.Cells[2, 1] = "100";
ws.Cells[2, 2] = "100";
//代码里写个公式
r = (Range)ws.Cells[2, 3];
r.Formula = "=A2*B2";
//输出Excel文件并退出
wb.Save();
wb.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
ws = null;
wb = null;
app = null;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Reflection;
using Microsoft.Office.Interop.Excel;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
Bind();
}
private void Bind()
{
//模板文件
string TempletFileName = Server.MapPath("template/") + "template.xlsx";
//导出文件
string ReportFileName = Server.MapPath("xls/") + "out.xlsx";
string strTempletFile = Path.GetFileName(TempletFileName);
//将模板文件复制到输出文件
FileInfo mode = new FileInfo(TempletFileName);
mode.CopyTo(ReportFileName, true);
//打开excel
object missing = Missing.Value;
Application app = null;
Workbook wb = null;
Worksheet ws = null;
Range r = null;
//
app = new Microsoft.Office.Interop.Excel.Application();
wb = app.Workbooks.Open(ReportFileName, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
app.Visible = true;
//得到WorkSheet对象
ws = (Worksheet)wb.Worksheets.get_Item(1);
//添加或修改WorkSheet里的数据
ws.Cells[1, 1] = "100";
ws.Cells[2, 1] = "100";
ws.Cells[2, 2] = "100";
//代码里写个公式
r = (Range)ws.Cells[2, 3];
r.Formula = "=A2*B2";
//输出Excel文件并退出
wb.Save();
wb.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
ws = null;
wb = null;
app = null;
}
}
参考:
C#操作Excel,套用模板并对数据进行分页
1
using System;
2
using System.IO;
3
using System.Data;
4
using System.Reflection;
5
using System.Diagnostics;
6
using cfg = System.Configuration;
7
//using Excel;
8
9
namespace ExcelHelperTest
10
{
11
/// <summary>
12
/// 功能说明:套用模板输出Excel,并对数据进行分页
13
/// 作 者:Lingyun_k
14
/// 创建日期:2005-7-12
15
/// </summary>
16
public class ExcelHelper
17
{
18
protected string templetFile = null;
19
protected string outputFile = null;
20
protected object missing = Missing.Value;
21
22
/// <summary>
23
/// 构造函数,需指定模板文件和输出文件完整路径
24
/// </summary>
25
/// <param name="templetFilePath">Excel模板文件路径</param>
26
/// <param name="outputFilePath">输出Excel文件路径</param>
27
public ExcelHelper(string templetFilePath,string outputFilePath)
28
{
29
if(templetFilePath == null)
30
throw new Exception("Excel模板文件路径不能为空!");
31
32
if(outputFilePath == null)
33
throw new Exception("输出Excel文件路径不能为空!");
34
35
if(!File.Exists(templetFilePath))
36
throw new Exception("指定路径的Excel模板文件不存在!");
37
38
this.templetFile = templetFilePath;
39
this.outputFile = outputFilePath;
40
41
}
42
43
/// <summary>
44
/// 将DataTable数据写入Excel文件(套用模板并分页)
45
/// </summary>
46
/// <param name="dt">DataTable</param>
47
/// <param name="rows">每个WorkSheet写入多少行数据</param>
48
/// <param name="top">行索引</param>
49
/// <param name="left">列索引</param>
50
/// <param name="sheetPrefixName">WorkSheet前缀名,比如:前缀名为“Sheet”,那么WorkSheet名称依次为“Sheet-1,Sheet-2
”</param>
51
public void DataTableToExcel(DataTable dt,int rows,int top,int left,string sheetPrefixName)
52
{
53
int rowCount = dt.Rows.Count; //源DataTable行数
54
int colCount = dt.Columns.Count; //源DataTable列数
55
int sheetCount = this.GetSheetCount(rowCount,rows); //WorkSheet个数
56
DateTime beforeTime;
57
DateTime afterTime;
58
59
if(sheetPrefixName == null || sheetPrefixName.Trim() == "")
60
sheetPrefixName = "Sheet";
61
62
//创建一个Application对象并使其可见
63
beforeTime = DateTime.Now;
64
Excel.Application app = new Excel.ApplicationClass();
65
app.Visible = true;
66
afterTime = DateTime.Now;
67
68
//打开模板文件,得到WorkBook对象
69
Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,
70
missing,missing,missing,missing,missing,missing,missing);
71
72
//得到WorkSheet对象
73
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
74
75
//复制sheetCount-1个WorkSheet对象
76
for(int i=1;i<sheetCount;i++)
77
{
78
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);
79
}
80
81
#region 将源DataTable数据写入Excel
82
for(int i=1;i<=sheetCount;i++)
83
{
84
int startRow = (i - 1) * rows; //记录起始行索引
85
int endRow = i * rows; //记录结束行索引
86
87
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
88
if(i == sheetCount)
89
endRow = rowCount;
90
91
//获取要写入数据的WorkSheet对象,并重命名
92
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
93
sheet.Name = sheetPrefixName + "-" + i.ToString();
94
95
//将dt中的数据写入WorkSheet
96
for(int j=0;j<endRow-startRow;j++)
97
{
98
for(int k=0;k<colCount;k++)
99
{
100
sheet.Cells[top + j,left + k] = dt.Rows[startRow + j][k].ToString();
101
}
102
}
103
104
//写文本框数据
105
Excel.TextBox txtAuthor = (Excel.TextBox)sheet.TextBoxes("txtAuthor");
106
Excel.TextBox txtDate = (Excel.TextBox)sheet.TextBoxes("txtDate");
107
Excel.TextBox txtVersion = (Excel.TextBox)sheet.TextBoxes("txtVersion");
108
109
txtAuthor.Text = "KLY.NET的Blog";
110
txtDate.Text = DateTime.Now.ToShortDateString();
111
txtVersion.Text = "1.0.0.0";
112
}
113
#endregion
114
115
//输出Excel文件并退出
116
try
117
{
118
workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);
119
workBook.Close(null,null,null);
120
app.Workbooks.Close();
121
app.Application.Quit();
122
app.Quit();
123
124
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
125
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
126
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
127
128
workSheet=null;
129
workBook=null;
130
app=null;
131
132
GC.Collect();
133
}
134
catch(Exception e)
135
{
136
throw e;
137
}
138
finally
139
{
140
Process[] myProcesses;
141
DateTime startTime;
142
myProcesses = Process.GetProcessesByName("Excel");
143
144
//得不到Excel进程ID,暂时只能判断进程启动时间
145
foreach(Process myProcess in myProcesses)
146
{
147
startTime = myProcess.StartTime;
148
149
if(startTime > beforeTime && startTime < afterTime)
150
{
151
myProcess.Kill();
152
}
153
}
154
}
155
156
}
157
158
159
/// <summary>
160
/// 获取WorkSheet数量
161
/// </summary>
162
/// <param name="rowCount">记录总行数</param>
163
/// <param name="rows">每WorkSheet行数</param>
164
private int GetSheetCount(int rowCount,int rows)
165
{
166
int n = rowCount % rows; //余数
167
168
if(n == 0)
169
return rowCount / rows;
170
else
171
return Convert.ToInt32(rowCount / rows) + 1;
172
}
173
174
175
/// <summary>
176
/// 将二维数组数据写入Excel文件(套用模板并分页)
177
/// </summary>
178
/// <param name="arr">二维数组</param>
179
/// <param name="rows">每个WorkSheet写入多少行数据</param>
180
/// <param name="top">行索引</param>
181
/// <param name="left">列索引</param>
182
/// <param name="sheetPrefixName">WorkSheet前缀名,比如:前缀名为“Sheet”,那么WorkSheet名称依次为“Sheet-1,Sheet-2
”</param>
183
public void ArrayToExcel(string[,] arr,int rows,int top,int left,string sheetPrefixName)
184
{
185
int rowCount = arr.GetLength(0); //二维数组行数(一维长度)
186
int colCount = arr.GetLength(1); //二维数据列数(二维长度)
187
int sheetCount = this.GetSheetCount(rowCount,rows); //WorkSheet个数
188
DateTime beforeTime;
189
DateTime afterTime;
190
191
if(sheetPrefixName == null || sheetPrefixName.Trim() == "")
192
sheetPrefixName = "Sheet";
193
194
//创建一个Application对象并使其可见
195
beforeTime = DateTime.Now;
196
Excel.Application app = new Excel.ApplicationClass();
197
app.Visible = true;
198
afterTime = DateTime.Now;
199
200
//打开模板文件,得到WorkBook对象
201
Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,
202
missing,missing,missing,missing,missing,missing,missing);
203
204
//得到WorkSheet对象
205
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
206
207
//复制sheetCount-1个WorkSheet对象
208
for(int i=1;i<sheetCount;i++)
209
{
210
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);
211
}
212
213
#region 将二维数组数据写入Excel
214
for(int i=1;i<=sheetCount;i++)
215
{
216
int startRow = (i - 1) * rows; //记录起始行索引
217
int endRow = i * rows; //记录结束行索引
218
219
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
220
if(i == sheetCount)
221
endRow = rowCount;
222
223
//获取要写入数据的WorkSheet对象,并重命名
224
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
225
sheet.Name = sheetPrefixName + "-" + i.ToString();
226
227
//将二维数组中的数据写入WorkSheet
228
for(int j=0;j<endRow-startRow;j++)
229
{
230
for(int k=0;k<colCount;k++)
231
{
232
sheet.Cells[top + j,left + k] = arr[startRow + j,k];
233
}
234
}
235
236
Excel.TextBox txtAuthor = (Excel.TextBox)sheet.TextBoxes("txtAuthor");
237
Excel.TextBox txtDate = (Excel.TextBox)sheet.TextBoxes("txtDate");
238
Excel.TextBox txtVersion = (Excel.TextBox)sheet.TextBoxes("txtVersion");
239
240
txtAuthor.Text = "KLY.NET的Blog";
241
txtDate.Text = DateTime.Now.ToShortDateString();
242
txtVersion.Text = "1.0.0.0";
243
}
244
#endregion
245
246
//输出Excel文件并退出
247
try
248
{
249
workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);
250
workBook.Close(null,null,null);
251
app.Workbooks.Close();
252
app.Application.Quit();
253
app.Quit();
254
255
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
256
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
257
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
258
259
workSheet=null;
260
workBook=null;
261
app=null;
262
263
GC.Collect();
264
}
265
catch(Exception e)
266
{
267
throw e;
268
}
269
finally
270
{
271
Process[] myProcesses;
272
DateTime startTime;
273
myProcesses = Process.GetProcessesByName("Excel");
274
275
//得不到Excel进程ID,暂时只能判断进程启动时间
276
foreach(Process myProcess in myProcesses)
277
{
278
startTime = myProcess.StartTime;
279
280
if(startTime > beforeTime && startTime < afterTime)
281
{
282
myProcess.Kill();
283
}
284
}
285
}
286
287
}
288
}
289
}
290
using System;2
using System.IO;3
using System.Data;4
using System.Reflection;5
using System.Diagnostics;6
using cfg = System.Configuration;7
//using Excel;8

9
namespace ExcelHelperTest10
{11
/// <summary>12
/// 功能说明:套用模板输出Excel,并对数据进行分页13
/// 作 者:Lingyun_k14
/// 创建日期:2005-7-1215
/// </summary>16
public class ExcelHelper17
{18
protected string templetFile = null;19
protected string outputFile = null;20
protected object missing = Missing.Value;21

22
/// <summary>23
/// 构造函数,需指定模板文件和输出文件完整路径24
/// </summary>25
/// <param name="templetFilePath">Excel模板文件路径</param>26
/// <param name="outputFilePath">输出Excel文件路径</param>27
public ExcelHelper(string templetFilePath,string outputFilePath)28
{29
if(templetFilePath == null)30
throw new Exception("Excel模板文件路径不能为空!");31

32
if(outputFilePath == null)33
throw new Exception("输出Excel文件路径不能为空!");34

35
if(!File.Exists(templetFilePath))36
throw new Exception("指定路径的Excel模板文件不存在!");37

38
this.templetFile = templetFilePath;39
this.outputFile = outputFilePath;40

41
}42

43
/// <summary>44
/// 将DataTable数据写入Excel文件(套用模板并分页)45
/// </summary>46
/// <param name="dt">DataTable</param>47
/// <param name="rows">每个WorkSheet写入多少行数据</param>48
/// <param name="top">行索引</param>49
/// <param name="left">列索引</param>50
/// <param name="sheetPrefixName">WorkSheet前缀名,比如:前缀名为“Sheet”,那么WorkSheet名称依次为“Sheet-1,Sheet-2
”</param>51
public void DataTableToExcel(DataTable dt,int rows,int top,int left,string sheetPrefixName)52
{53
int rowCount = dt.Rows.Count; //源DataTable行数54
int colCount = dt.Columns.Count; //源DataTable列数55
int sheetCount = this.GetSheetCount(rowCount,rows); //WorkSheet个数56
DateTime beforeTime; 57
DateTime afterTime;58
59
if(sheetPrefixName == null || sheetPrefixName.Trim() == "")60
sheetPrefixName = "Sheet";61

62
//创建一个Application对象并使其可见63
beforeTime = DateTime.Now;64
Excel.Application app = new Excel.ApplicationClass();65
app.Visible = true;66
afterTime = DateTime.Now;67

68
//打开模板文件,得到WorkBook对象69
Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,70
missing,missing,missing,missing,missing,missing,missing);71

72
//得到WorkSheet对象73
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);74

75
//复制sheetCount-1个WorkSheet对象76
for(int i=1;i<sheetCount;i++)77
{78
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);79
}80

81
#region 将源DataTable数据写入Excel82
for(int i=1;i<=sheetCount;i++)83
{84
int startRow = (i - 1) * rows; //记录起始行索引85
int endRow = i * rows; //记录结束行索引86

87
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数88
if(i == sheetCount)89
endRow = rowCount;90

91
//获取要写入数据的WorkSheet对象,并重命名92
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);93
sheet.Name = sheetPrefixName + "-" + i.ToString();94

95
//将dt中的数据写入WorkSheet96
for(int j=0;j<endRow-startRow;j++)97
{98
for(int k=0;k<colCount;k++)99
{100
sheet.Cells[top + j,left + k] = dt.Rows[startRow + j][k].ToString();101
}102
}103

104
//写文本框数据105
Excel.TextBox txtAuthor = (Excel.TextBox)sheet.TextBoxes("txtAuthor");106
Excel.TextBox txtDate = (Excel.TextBox)sheet.TextBoxes("txtDate");107
Excel.TextBox txtVersion = (Excel.TextBox)sheet.TextBoxes("txtVersion");108

109
txtAuthor.Text = "KLY.NET的Blog";110
txtDate.Text = DateTime.Now.ToShortDateString();111
txtVersion.Text = "1.0.0.0";112
}113
#endregion114

115
//输出Excel文件并退出116
try117
{118
workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);119
workBook.Close(null,null,null);120
app.Workbooks.Close();121
app.Application.Quit();122
app.Quit();123

124
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);125
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);126
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);127

128
workSheet=null;129
workBook=null;130
app=null;131

132
GC.Collect();133
}134
catch(Exception e)135
{136
throw e;137
}138
finally139
{140
Process[] myProcesses;141
DateTime startTime;142
myProcesses = Process.GetProcessesByName("Excel");143

144
//得不到Excel进程ID,暂时只能判断进程启动时间145
foreach(Process myProcess in myProcesses)146
{147
startTime = myProcess.StartTime;148

149
if(startTime > beforeTime && startTime < afterTime)150
{151
myProcess.Kill();152
}153
}154
}155
156
}157

158
159
/// <summary>160
/// 获取WorkSheet数量161
/// </summary>162
/// <param name="rowCount">记录总行数</param>163
/// <param name="rows">每WorkSheet行数</param>164
private int GetSheetCount(int rowCount,int rows)165
{166
int n = rowCount % rows; //余数167

168
if(n == 0)169
return rowCount / rows;170
else171
return Convert.ToInt32(rowCount / rows) + 1;172
}173

174

175
/// <summary>176
/// 将二维数组数据写入Excel文件(套用模板并分页)177
/// </summary>178
/// <param name="arr">二维数组</param>179
/// <param name="rows">每个WorkSheet写入多少行数据</param>180
/// <param name="top">行索引</param>181
/// <param name="left">列索引</param>182
/// <param name="sheetPrefixName">WorkSheet前缀名,比如:前缀名为“Sheet”,那么WorkSheet名称依次为“Sheet-1,Sheet-2
”</param>183
public void ArrayToExcel(string[,] arr,int rows,int top,int left,string sheetPrefixName)184
{185
int rowCount = arr.GetLength(0); //二维数组行数(一维长度)186
int colCount = arr.GetLength(1); //二维数据列数(二维长度)187
int sheetCount = this.GetSheetCount(rowCount,rows); //WorkSheet个数188
DateTime beforeTime; 189
DateTime afterTime;190
191
if(sheetPrefixName == null || sheetPrefixName.Trim() == "")192
sheetPrefixName = "Sheet";193

194
//创建一个Application对象并使其可见195
beforeTime = DateTime.Now;196
Excel.Application app = new Excel.ApplicationClass();197
app.Visible = true;198
afterTime = DateTime.Now;199

200
//打开模板文件,得到WorkBook对象201
Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,202
missing,missing,missing,missing,missing,missing,missing);203

204
//得到WorkSheet对象205
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);206

207
//复制sheetCount-1个WorkSheet对象208
for(int i=1;i<sheetCount;i++)209
{210
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);211
}212

213
#region 将二维数组数据写入Excel214
for(int i=1;i<=sheetCount;i++)215
{216
int startRow = (i - 1) * rows; //记录起始行索引217
int endRow = i * rows; //记录结束行索引218

219
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数220
if(i == sheetCount)221
endRow = rowCount;222

223
//获取要写入数据的WorkSheet对象,并重命名224
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);225
sheet.Name = sheetPrefixName + "-" + i.ToString();226

227
//将二维数组中的数据写入WorkSheet228
for(int j=0;j<endRow-startRow;j++)229
{230
for(int k=0;k<colCount;k++)231
{232
sheet.Cells[top + j,left + k] = arr[startRow + j,k];233
}234
}235

236
Excel.TextBox txtAuthor = (Excel.TextBox)sheet.TextBoxes("txtAuthor");237
Excel.TextBox txtDate = (Excel.TextBox)sheet.TextBoxes("txtDate");238
Excel.TextBox txtVersion = (Excel.TextBox)sheet.TextBoxes("txtVersion");239

240
txtAuthor.Text = "KLY.NET的Blog";241
txtDate.Text = DateTime.Now.ToShortDateString();242
txtVersion.Text = "1.0.0.0";243
}244
#endregion245

246
//输出Excel文件并退出247
try248
{249
workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);250
workBook.Close(null,null,null);251
app.Workbooks.Close();252
app.Application.Quit();253
app.Quit();254

255
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);256
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);257
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);258

259
workSheet=null;260
workBook=null;261
app=null;262

263
GC.Collect();264
}265
catch(Exception e)266
{267
throw e;268
}269
finally270
{271
Process[] myProcesses;272
DateTime startTime;273
myProcesses = Process.GetProcessesByName("Excel");274

275
//得不到Excel进程ID,暂时只能判断进程启动时间276
foreach(Process myProcess in myProcesses)277
{278
startTime = myProcess.StartTime;279

280
if(startTime > beforeTime && startTime < afterTime)281
{282
myProcess.Kill();283
}284
}285
}286
287
}288
}289
}290



浙公网安备 33010602011771号