我用C#编程导出到Excel,怎么所有的Excel都打不开?必须重新启动机器才可以.

pts_ben 2006-05-02 10:47:10
Excel.Application excel = new Excel.ApplicationClass();
object oMissing = System.Reflection.Missing.Value;

Excel.Workbook xBk =excel.Workbooks.Open(@"d:\a.xls",
Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

//指定要操作的Sheet,两种方式:

// Excel.Workbook xBk = excel.Workbooks.Add(oMissing);
Excel.Worksheet xSt = (Excel.Worksheet)xBk.ActiveSheet;
excel.Cells[1,1] = "Ta";//文字

xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//对齐方式
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Select();//设置选中的部分的颜色
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Font.Bold = true;//字体类型
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Font.Size = 22;//字体大小

xSt.get_Range("a1","a1").ColumnWidth = 20;//列宽度
object oo = false;
xSt.get_Range("A1","D1").Merge(oo);//合并单元格

try
{
//保存文件
// xBk.SaveAs(@"c:\a.xls",System.Reflection.Missing.Value,"","",true,false,Excel.XlSaveAsAccessMode.xlNoChange,1,true,System.Reflection.Missing.Value,oMissing);
xBk.Save();

}
catch(Exception exc)
{
Label2.Text=exc.ToString();
}
finally
{
xBk.Close(false,null,null);
excel.Workbooks.Close();
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject( xSt );
System.Runtime.InteropServices.Marshal.ReleaseComObject( xBk );
System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );
xSt = null;
xBk = null;
excel = null;
GC.Collect();
}
导入到Excel后,Excel打不开,数据导入成功了,但必须重新启动机器才可以打开Excel.
...全文
447 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pts_ben 2006-05-02
  • 打赏
  • 举报
回复

我再执行kill进程时遇到了这样的问题
System.ComponentModel.Win32Exception: 拒绝访问。
SEED_twj 2006-05-02
  • 打赏
  • 举报
回复
private void button1_Click(object sender, System.EventArgs e)
{
//----------连接SQL-------------
try
{
string conSql = "server=.;uid=sa;pwd=;database=pubs";
System.Data.SqlClient.SqlConnection conn = new SqlConnection(conSql);
try
{
string selectSql = "select au_id 作者ID,au_lname 名,au_fname 姓,phone 电话,address 地址,city 城市,state 国家,zip 邮编,contract 合同 from authors";
System.Data.SqlClient.SqlCommand cmd = new SqlCommand(selectSql,conn);
conn.Open();
System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();

//-----------创建EXCEL------------
Excel.ApplicationClass app1 = new Excel.ApplicationClass();//创建EXCEL对象
app1.Workbooks.Add(true);//创建excel工作薄
int Rows = 2;
for(int col=0;col<dr.FieldCount;col++)
{
app1.Cells [1,col+1]=dr.GetName(col);
}
while (dr.Read())
{
for(int col=0;col<dr.FieldCount;col++)
{
app1.Cells [Rows,col+1]=dr.GetValue(col).ToString();
}
Rows++;
}
//app1.Visible=true;
app1.Save(true);
app1.Workbooks.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
catch (Exception exx)
{
MessageBox.Show(exx.Message);
}
wcmj 2006-05-02
  • 打赏
  • 举报
回复
没有真的关掉excel
Knight94 2006-05-02
  • 打赏
  • 举报
回复
是不起作用,你需要用Process去kill。
Knight94 2006-05-02
  • 打赏
  • 举报
回复
参看
http://www.codeproject.com/csharp/package.asp
pts_ben 2006-05-02
  • 打赏
  • 举报
回复
再资源管理器里边确实有Excel进程.那我已经quit()了,为什么不起作用呢?
Knight94 2006-05-02
  • 打赏
  • 举报
回复
你是否真的释放了Excel.Application对象,当你操作完成后,你看看是否还有excel进程存在。
ice_frank 2006-05-02
  • 打赏
  • 举报
回复

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧