在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试

maomao201101 2014-07-29 09:08:08
在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。

需要说明的是,小弟的程序是ASP.NET Web应用程序,想要在网页中添加一个按钮,在按钮事件中实现对Word模板的输出

网上的解决办法都是:在main()函数前面加上[STAThread] ,可我的这个程序好像没有main()函数,只有button事件,那怎么办呢,在线请教各位大神~~~~~

附上我出问题的代码:
protected void Button5_Click(object sender, EventArgs e)
{

//来自博客http://blog.csdn.net/fujie724
object oMissing = System.Reflection.Missing.Value;
//创建一个Word应用程序实例
Word._Application oWord = new Word.Application();
//设置为不可见
oWord.Visible = false;
//模板文件地址,这里假设在X盘根目录
object oTemplate = "D://我的简历.dot";
//以模板为基础生成文档
Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
//声明书签数组
object[] oBookMark = new object[5];
//赋值书签名
oBookMark[0] = "beizhu";
oBookMark[1] = "name";
oBookMark[2] = "sex";
oBookMark[3] = "birthday";
oBookMark[4] = "hometown";
//赋值任意数据到书签的位置
oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板实现Word生成";
oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "李四";
oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "女";
oDoc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = "1987.06.07";
oDoc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = "贺州";

//弹出保存文件对话框,保存生成的Word
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Word Document(*.doc)|*.doc";
sfd.DefaultExt = "Word Document(*.doc)|*.doc";

if (sfd.ShowDialog() == DialogResult.OK)///////////////////////////VS2010运行,此处提示上述问题
{
object filename = sfd.FileName;

oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
//关闭word
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);

}
}
...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2014-07-29
  • 打赏
  • 举报
回复

thImport = new Thread(new ThreadStart(ict.StartImport));
            thImport.IsBackground = true;
            thImport.TrySetApartmentState(ApartmentState.STA);
            thImport.Start();
你按照红色部分这样写

110,534

社区成员

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

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

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