C#导出到Excel模板中,保存后Excel进程无法结束
int rowCount = dt.Rows.Count; //源DataTable行数
int colCount = (dt.Columns.Count - 9); //源DataTable列数减一,最后一列为项目类型名称,用于标题的
int sheetCount = this.GetSheetCount(rowCount, rows); //WorkSheet个数,即页数
DateTime beforeTime;
DateTime afterTime;
if (sheetPrefixName == null || sheetPrefixName.Trim() == "")
sheetPrefixName = "Sheet";
//创建一个Application对象并使其可见
beforeTime = DateTime.Now;
Excel.Application app = new Excel.ApplicationClass();
app.Visible = true;
afterTime = DateTime.Now;
//打开模板文件,得到WorkBook对象
Excel.Workbook workBook = app.Workbooks._Open(templetFile, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing);
//得到一个WorkSheet对象
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
//复制sheetCount-1个WorkSheet对象
for (int i = 1; i < sheetCount; i++)
{
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing, workBook.Worksheets[i]);
}
//将源DataTable数据写入Excel
for (int i = 1; i <= sheetCount; i++)
{
int startRow = (i - 1) * rows; //记录起始行索引
int endRow = i * rows; //记录结束行索引
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
if (i == sheetCount)
endRow = rowCount;
//获取要写入数据的WorkSheet对象,并重命名
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
sheet.Name = sheetPrefixName + "-" + i.ToString();
//将dt中的数据写入WorkSheet
for (int j = 0; j < endRow - startRow; j++)
{
int z = startRow + j + 1;
sheet.Cells[top + j, left] = z.ToString();//第一列为检索结果的序号
for (int k = 1; k < colCount + 1; k++)
{
sheet.Cells[top + j, left + k] = dt.Rows[startRow + j][k].ToString();
}
}
}
//输出Excel文件并退出
try
{
workBook.SaveAs(outputFile, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);
workBook.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
}
catch (Exception e)
{
throw e;
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
workSheet = null;
workBook = null;
app = null;
GC.Collect();
}
int colCount = (dt.Columns.Count - 9); //源DataTable列数减一,最后一列为项目类型名称,用于标题的
int sheetCount = this.GetSheetCount(rowCount, rows); //WorkSheet个数,即页数
DateTime beforeTime;
DateTime afterTime;
if (sheetPrefixName == null || sheetPrefixName.Trim() == "")
sheetPrefixName = "Sheet";
//创建一个Application对象并使其可见
beforeTime = DateTime.Now;
Excel.Application app = new Excel.ApplicationClass();
app.Visible = true;
afterTime = DateTime.Now;
//打开模板文件,得到WorkBook对象
Excel.Workbook workBook = app.Workbooks._Open(templetFile, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing);
//得到一个WorkSheet对象
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
//复制sheetCount-1个WorkSheet对象
for (int i = 1; i < sheetCount; i++)
{
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing, workBook.Worksheets[i]);
}
//将源DataTable数据写入Excel
for (int i = 1; i <= sheetCount; i++)
{
int startRow = (i - 1) * rows; //记录起始行索引
int endRow = i * rows; //记录结束行索引
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
if (i == sheetCount)
endRow = rowCount;
//获取要写入数据的WorkSheet对象,并重命名
Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
sheet.Name = sheetPrefixName + "-" + i.ToString();
//将dt中的数据写入WorkSheet
for (int j = 0; j < endRow - startRow; j++)
{
int z = startRow + j + 1;
sheet.Cells[top + j, left] = z.ToString();//第一列为检索结果的序号
for (int k = 1; k < colCount + 1; k++)
{
sheet.Cells[top + j, left + k] = dt.Rows[startRow + j][k].ToString();
}
}
}
//输出Excel文件并退出
try
{
workBook.SaveAs(outputFile, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);
workBook.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
}
catch (Exception e)
{
throw e;
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
workSheet = null;
workBook = null;
app = null;
GC.Collect();
}
...全文
相关推荐
C# 导出利用模板,映射文件导出复杂excel
原创. 我的水平不怎么样,多多指教,有跟好的方法希望交流.
winform导出数据库数据至Excel模板(预览及保存)例程
C# winform下将数据库中数据表的数据导出到Excel模板中,可以预览及保存Excel
C#-Winform将Datatable导出Excel
C#-Winform将Datatable导出Excel,支持 用户选择路径 以及 按Excel模版 导出数据
C#结束Excel进程的步骤教学
在本篇文章里小编给大家分享了关于C#结束Excel进程的步骤教学内容,有兴趣的朋友们学习下。
c#导出EXCEL弹出保存路径对话框的公用脚本
c# 导出EXCEL弹出保存路径对话框的公用脚本,带窗体,短小精悍,适用性非常强,自动设置高度和宽度等功能,还可以设置默认名称,只要略微读懂代码即可使用。


