Open word document in read only mode using asp.net c#

Does anyone have any sample code opening a word document using word automation in c# and asp.net.  I found examples of creating new documents, but no examples of opening existing documents in read only mode.

Thanks...
LVL 2
michael1174Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Daniel JungesCommented:
private Word.ApplicationClass WordApp = new Word.ApplicationClass();

object fileName = myFileName;
object readOnly = true;

object isVisible = true;
object missing = System.Reflection.Missing.Value;
WordApp.Visible = true;

Word.Document aDoc = WordApp.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);

aDoc.Activate();
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Daniel JungesCommented:
other nice sample you can find here: http://www.codeproject.com/KB/aspnet/wordapplication.aspx
0
michael1174Author Commented:
junges, I get the following error;

The type or namespace name 'Word' could not be found (are you missing a using directive or an assembly reference?)

I added the microsoft office com library to my reference list... do I need to add a using reference line?

0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

stevemarshallCommented:
You could just change the file that you are opening to be read only using the

File.SetAttributes( YourFilePath, FileAttributes.ReadOnly );

method.
0
michael1174Author Commented:
stevemarshall, what reference do I need to specify to use File?

so, I could technically do something like this:

File.SetAttributes( "file://uncpath/" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc", FileAttributes.ReadOnly );

Response.Write("<script>window.open('file://uncpath/" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc')</script>");
0
Daniel JungesCommented:
dont forget to add the references.

if you are using Word2003 then use this namespace Microsoft.Office.Interop.Word
and the open function muss have 16 parameters. just add "ref missing" for the others.
0
michael1174Author Commented:
junges, i'm stuck on word 97 right now.. haha, but I was able to add the word object reference, the only thing now is i get a problem with the path I am specifiying... what would be the correct unc path name?

the error I get:
The document name or path is not valid. Try one or more of the following:

my unc path:

//server001/vol1/SHARDATA/Admiral Forms/doument.doc

0
stevemarshallCommented:
It's in the System.IO namespace, and I think you just need to have the System.dll referenced.
0
michael1174Author Commented:
can someone help me correctly define my document path...

object fileName = "\\server\vol1\SHARDATA\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";

I keep getting:

; expected

and

Newline in constant


0
stevemarshallCommented:
The '\' character is the escape character, you should either use \\ i.e. escape the escape character or prefix the string with a @ symbol.

So your code above would become:

object fileName = @"\\server\vol1\SHARDATA\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";
0
michael1174Author Commented:
thanks steve.. still getting the

The document name or path is not valid.

I've tried these two... and when I step through the code, fileName is correct, and I can access it through windows explorer

object fileName = @"\\server\vol1\SHARDATA\ADMIRAL\Admiral Forms\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";

object fileName = "\\\server\\vol1\\SHARDATA\\ADMIRAL\\Admiral Forms\\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";


 Here is all my code:
Word.ApplicationClass WordApp = new Word.ApplicationClass();
 
object fileName = @"\\server\vol1\SHARDATA\ADMIRAL\Admiral Forms\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";
			
object fileName = "\\\server\\vol1\\SHARDATA\\ADMIRAL\\Admiral Forms\\" + e.Item.Cells[1].Text + e.Item.Cells[3].Text + ".doc";
 
object readOnly = true;
object isVisible = true;
object missing = System.Reflection.Missing.Value;
WordApp.Visible = true;
 
Word.Document aDoc = WordApp.Documents.Open(ref fileName, ref missing,ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
 
aDoc.Activate();

Open in new window

0
stevemarshallCommented:
Just comparing your code to mine, firstly I create a FileInfo object then use the FullName property rather than creating a path by hand.

Secondly I use Type.Missing rather than System.Reflection.Missing.Value.

To check that your path is valid you could use:

File.Exists( fileName.ToString() );

It returns a boolean and at least then you will know if it's a problem with your unc path or with Word automation.
0
michael1174Author Commented:
steve,
when I do a:

? fileName.ToString()
@"\\server\vol1\SHARDATA\ADMIRAL\Admiral Forms\AI00121.doc"

I copy and past inbetween the quotes into my windows explorer, and I open the file, no problem.. but I used you code as you suggested below and it skipped it.


			if (File.Exists(fileName.ToString()))
			{
				Word.Document oWordDoc = WordApp.Documents.Open(ref fileName, ref missing,ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
				oWordDoc.Activate();
			}

Open in new window

0
stevemarshallCommented:
This is a permissions problem.

Open your web.config and make sure that you have the line

<identity impersonate="true"/>

You should also check that the permission that is configured for anonymous access in IIS is set to a user who has access to the share.

It'll be worth reading up on the pitfalls surrounding impersonation before you do this in a live environment.

http://msdn2.microsoft.com/en-us/library/aa719560(VS.71).aspx  - might be a good place to start.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.