soapygus
asked on
Problem Automating Word 2007 -- ActiveDocument not found
Hello Experts,
I have a asp.net page that creates and saves a .docx file to a directory and then uses word automation to open the docx and save it as a PDF file. I realize this isn't a great solution, but it's the only option I have at the moment. This works great on my dev box which is running Office 2007 sp1 on W2k3 Server. I was then asked to deploy this to a Win 2008 server. It also has Office 2007 sp1 installed.
The problem: Now the app runs and saves the docx file. However, the word automation piece isn't working. I open the docx using this:
MSdoc.Documents.Open(ref Source, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
And then I save the file using this:
MSdoc.ActiveDocument.SaveA s(ref Target, ref format,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown);
This last line triggers the error because it cannot find an Active Document. Again, this works fine on my dev box. I'm not sure what might be causing this.
Any help is much appreciated.
I have a asp.net page that creates and saves a .docx file to a directory and then uses word automation to open the docx and save it as a PDF file. I realize this isn't a great solution, but it's the only option I have at the moment. This works great on my dev box which is running Office 2007 sp1 on W2k3 Server. I was then asked to deploy this to a Win 2008 server. It also has Office 2007 sp1 installed.
The problem: Now the app runs and saves the docx file. However, the word automation piece isn't working. I open the docx using this:
MSdoc.Documents.Open(ref Source, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
And then I save the file using this:
MSdoc.ActiveDocument.SaveA
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown);
This last line triggers the error because it cannot find an Active Document. Again, this works fine on my dev box. I'm not sure what might be causing this.
Any help is much appreciated.
ASKER
Thanks for the help. I'm not sure I understand what you mean by get a reference to the doc. Is it possible to save the document as a PDF using the techinique you describe?
Here is my method in full.
if (MSdoc == null) MSdoc = new Microsoft.Office.Interop.W
try
{
MSdoc.Visible = true;
MSdoc.Documents.Open(ref Source, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
MSdoc.Application.Visible = true;
MSdoc.WindowState = Microsoft.Office.Interop.W
object format = Microsoft.Office.Interop.W
MSdoc.ActiveDocument.SaveA
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown);
}
catch (Exception e)
{
return;
}
finally
{
if (MSdoc != null)
{
MSdoc.Documents.Close(ref Unknown, ref Unknown, ref Unknown);
//WordDoc.Application.Quit
}
// for closing the application
MSdoc.Quit(ref Unknown, ref Unknown, ref Unknown);
remove the following lines of code since we dont need the document to be opened in a window.
MSdoc.Visible = true;
MSdoc.Application.Visible = true;
MSdoc.WindowState = Microsoft.Office.Interop.W ord.WdWind owState.wd WindowStat eNormal;
also check if there is any Documents.Save method instead of ActiveDocuments.Save
MSdoc.Visible = true;
MSdoc.Application.Visible = true;
MSdoc.WindowState = Microsoft.Office.Interop.W
also check if there is any Documents.Save method instead of ActiveDocuments.Save
ASKER
Ok --
I have updated the code to reference the doc as follows:
if (wordApp == null) wordApp = new Microsoft.Office.Interop.W
try
{
//Open the source docx
wordDoc = wordApp.Documents.Open(
ref Source, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
ref Unknown);
//Export docx to PDF
if (wordDoc != null)
{
wordDoc.ExportAsFixedForma
paramExportOptimizeFor, paramExportRange, paramStartPage,
paramEndPage, paramExportItem, paramIncludeDocProps,
paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
paramBitmapMissingFonts, paramUseISO19005_1,
ref Unknown);
}
}
Unfortunately, ever time I step through the code the method exits at this line:
if (wordDoc != null)
I'm not sure why the wordDoc evaluates to null. I've tried hard coding the path to the file, but I still get the same results.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks you got me started in the right path.
I just created a new web app and used the exact same code and it worked. I think I have a reference that is interfering, but I haven't found it yet.
you are welcome
are you logged into the server when you tried to run this application?
are you activating a document before saving?
I guess your answer would be yes for the above
You should not be opening a winword window or activate it because if you do so in the applicaiton it will fail if no user is logged in to the machine since the application will not create an active window on the server.
get the reference to the document and do what ever you want using the reference do not activate