WORD 文件打开的问题
private Word.ApplicationClass oldWordApplic;
private Word.Document oDoc;
private static readonly string modWord = ConfigurationManager.AppSettings[ "WordMod "];//模板路径
private static readonly string docWord = ConfigurationManager.AppSettings[ "WordDoc "];//修改后路径
protected void Button3_Click(object sender, EventArgs e)
{
try
{
Open(modWord);
GotoBookMark( "收文时间 ");
InsertText(labSWSJ.Text.Replace( " ", " "));
GotoBookMark( "期刊号 ");
InsertText(labQKH.Text);
SaveAs(docWord);
QuitWord(oldWordApplic);
//Open(docWord);
//KillWord();
DownWord();
}
catch (Exception ex)
{
//KillWord();
throw new Exception(ex.Message);
}
}
protected void DownWord()
{
FileStream fs = new FileStream(docWord, FileMode.Open, FileAccess.Read);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Flush();
fs.Close();
Response.ContentType = "Application/msword ";
Response.AddHeader( "Content-Disposition ", "attachment;filename=new.doc ");
Response.BinaryWrite(bytes);
Response.Flush();
Response.Close();
}
public void Open(string strFileName)
{
if (strFileName != null && strFileName != string.Empty)
{
try
{
oldWordApplic = new Word.ApplicationClass();
oDoc = new Word.Document();
object fileName = strFileName;
object readOnly = false;
object isVisible = true;
object missing = System.Reflection.Missing.Value;
oldWordApplic.Visible = true;//显示
oDoc = oldWordApplic.Documents.Open(ref fileName, ref missing, ref readOnly,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);
oDoc.Activate();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
else { throw new Exception( "模板不存在 "); }
}
public void GotoBookMark(string strBookMarkName)
{
// VB : Selection.GoTo What:=wdGoToBookmark, Name:= "nome "
object missing = System.Reflection.Missing.Value;
object Bookmark = (int)Word.WdGoToItem.wdGoToBookmark;
object NameBookMark = strBookMarkName;
oldWordApplic.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
}
public void InsertText(string strText)
{
oldWordApplic.Selection.TypeText(strText);
}
public void InsertLineBreak()
{
oldWordApplic.Selection.TypeParagraph();
}
public void SaveAs(string strFileName)
{
object missing = System.Reflection.Missing.Value;
object fileName = strFileName;
oDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
}
public void KillWord()
{
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process p in ps)
{
if (p.ProcessName.ToLower().CompareTo( "winword ") == 0)
p.Kill();
}
Console.ReadKey();
}
public void QuitWord(Word.ApplicationClass WordApplic)
{
object missing = System.Reflection.Missing.Value;
WordApplic.Application.Quit(ref missing, ref missing, ref missing);
}
我所遇到的问题是,点击按钮在服务器进程里面已经有WORD了,但就是不显示。
在我本机用VS2005可以显示。生成网站考到服务器上就不显示了。
后来我 给写了个DownWord()方法,在客户端以流的方式大开。
但是这样又遇到问题 报以下错误。
“/”应用程序中的服务器错误。
--------------------------------------------
文件“D:\Web\template\doc\ccc.doc”正由另一进程使用,因此该进程无法访问该文件。
大家帮我看看我这端程序错误处于那里?
我想要的效果是,点击按钮 引用WORD模板文件(modWord 属性) 把数据导入到里面 在另存为(docWord 属性) ccc.doc文件
在将ccc.doc这个文件在客户端打开。
[解决办法]
打开后关闭了吗?
myWordDoc.Close(ref oMissing, ref oMissing, ref oMissing);