C#-C# 打开Excel问题

意见反馈 意见反馈 主题:991 回复:2082

C#-C# 打开Excel问题

虐人心 发布于 2017-05-25 字数 149 浏览 1004 回复 3

用C#实现在窗体中打开Excel文件并在窗体中显示,但关闭窗体的时候发现Excel进程仍在运行,每次打开都会增加一个Excel 进程,如何避免这种情况,请指教。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

甜柠檬 2017-09-30 3 楼

关闭窗体时调用Excel.Quit();
然后调用GC.Collect();试一下
要不就获取到Excel进程的id 使用Process.Kill()干掉他

上段代码
//创建一个Excel运行环境
Application app = new Application();
//
app.Visible = false;
//创建Excel中的工作薄
Workbook wb = (Workbook)app.Workbooks.Add(Missing.Value);
//创建Excel工作薄中的 页 sheet
Worksheet sheet =(Worksheet ) wb.ActiveSheet;

try
{
//设置列表头
for (int i = 0; i < array.Count; i++)
{
sheet.Cells[2, i + 1] = array[i].ToString();
}
//合并列
for (int i = 65; i < 83; i++)
{
string start;
string end;
start = Convert.ToChar(i).ToString() + "1";
end = Convert.ToChar(i).ToString() + "2";
sheet.get_Range(start, end).Merge(sheet.get_Range(start, end).MergeCells);
}
//得到 Range 范围 域对象
Range range = sheet.get_Range("A1", "R26");
//设置 该range内的 样式 颜色 边框

//Console.WriteLine("该域内有" + range.Rows.Count.ToString() + "行数据");

//设置Excel表格的 列宽
sheet.get_Range("A1", "A1").ColumnWidth = 15;
//sheet.get_Range("L1" , "L69" ).ColumnWidth = 30;

//sheet.get_Range("P1", "Q69").ColumnWidth = 30;

//sheet.get_Range("R1", "U69").ColumnWidth = 30;

//设置 域 Range 的颜色 从 A1到W1
sheet.get_Range("A1", "R1").Interior.ColorIndex = 15;
sheet.get_Range("A2", "R2").Interior.ColorIndex = 15;

//设置 某个域 range 被选中

            //sheet.get_Range("A1", "W1").Select();
            //sheet.get_Range("A2", "W2").Select();

sheet.get_Range("A3", "R3").Select();

//左右 设置 选中域内的 Excel单元格从C 到W 是活动的 前面的A B 为固定的
//但是 上下 方向 表头(这里表头合并两行 )没有固定 选C3 到W3(表示从C的第三行开始 为 活动 的 上面两行为固定的)
app.ActiveWindow.FreezePanes = true;

//设置 某个域range内 单元格里的字体颜色
sheet.get_Range("A1", "R2").Font.Color = -16744448;//(搜索Excel颜色对照表)
sheet.get_Range("A3", "R26").Font.Color = -16776961;
//文字 居中

            range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
            range.Font.Size = 10;
            range.Borders.LineStyle = 1;

//设置边框
range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlMedium, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
range.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight = XlBorderWeight.xlMedium;
range.WrapText = true;

wb.Saved = true;

//保存工作薄
app.ActiveWorkbook.SaveCopyAs(filepath);
}

catch (Exception e)
{
File.AppendAllText(Log, e.Message.ToString());
}
finally
{
wb.Close(null, null, null);
app.Workbooks.Close();
app.Quit();
Marshal.ReleaseComObject((object)app);
Marshal.ReleaseComObject((object)wb);
Marshal.ReleaseComObject((object)sheet);
GC.Collect();
}

甜柠檬 2017-08-26 2 楼

不要启动EXCEL读取数据,占用资源大,用数据链接OLEDB,读的时候打开,不读的时候关闭

夜无邪 2017-08-09 1 楼

建议获取进程直接KILL掉