parnian man
یک شنبه 15 بهمن 1391, 19:34 عصر
سلام
من یه پروژه وب با asp.net و C# نوشتم
در یه قسمت از پروژه لینکی وجود داره که با کلیک روی این لینک اطلاعات از sql خونده میشه و داخل template از فایل docx قرار میگیره ، برای این کار هم از اسمبلی مایکروسافت microsoft.office.interop.word استفاده کردم .
این برنامه ، لوکال و با استفاده از vs که اجرا میشه هیچ مشکلی نداره . ولی وقتی روی همون سیستم ست آپ می سازم و روی IIS میزارم ، لینک مورد نظر رو که کلیک می کنم هیچ اتفاقی نمی افته و خبری از فایل docx نیست.
تنظیمات application pool در IIS هم net4 و 32bitappهم true و identity هم روی local system هست
کد هم اینه:
Object oMissing = System.Reflection.Missing.Value;
Object oTrue = true;
Object oFalse = false;
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document();
oWord.Visible = true;
try
{
Object oTemplatePath = Server.MapPath("\\shenasname.dotx");
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Word.Field myMergeField in oWordDoc.Fields)
{
Word.Range rngFieldCode = myMergeField.Code;
String fieldText = rngFieldCode.Text;
if (fieldText.StartsWith(" MERGEFIELD"))
{
Int32 endMerge = fieldText.IndexOf("\\");
Int32 fieldNameLength = fieldText.Length - endMerge;
String fieldName = fieldText.Substring(11, endMerge - 11);
fieldName = fieldName.Trim();
if (fieldName == "ComputerName")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[1].Text);
}
if (fieldName == "IP")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[2].Text);
}
if (fieldName == "PrizNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[23].Text);
}
if (fieldName == "SwitchNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[24].Text);
}
if (fieldName == "PatchNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[25].Text);
}
if (fieldName == "MouseNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "SpeakerNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "KeyboardNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "MonitorNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[27].Text);
}
if (fieldName == "CaseNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[26].Text);
}
string mainuser = null;
string user = null;
for (int i = 0; i < grdpeigiri.Rows.Count; i++)
{
if (grdpeigiri.Rows[i].Cells[5].Text.Contains("*"))
{
mainuser = grdpeigiri.Rows[i].Cells[4].Text;
}
else
{
if (user == null)
{
user = user + grdpeigiri.Rows[i].Cells[4].Text;
}
else
{
user = user + " - " + grdpeigiri.Rows[i].Cells[4].Text;
}
}
}
if (user == null) user = "-";
if (fieldName == "Section")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[7].Text);
}
if (fieldName == "MainUser")
{
myMergeField.Select();
oWord.Selection.TypeText(mainuser);
}
if (fieldName == "OtherUser")
{
myMergeField.Select();
oWord.Selection.TypeText(user);
}
if (fieldName == "MainBoard")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[18].Text);
}
if (fieldName == "CPU")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[10].Text);
}
if (fieldName == "RAM")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[11].Text);
}
if (fieldName == "HDD")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[13].Text);
}
if (fieldName == "VGA")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[12].Text);
}
if (fieldName == "Sound")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[20].Text);
}
if (fieldName == "Lan")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[19].Text);
}
if (fieldName == "Case")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[8].Text);
}
if (fieldName == "Monitor")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[9].Text);
}
if (fieldName == "ODD")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[21].Text);
}
if (fieldName == "Scanner")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[15].Text);
}
if (fieldName == "Speaker")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[16].Text);
}
if (fieldName == "Modem")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[22].Text);
}
if (fieldName == "UPS")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[17].Text);
}
if (fieldName == "Printer")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[14].Text);
}
}
}
}
catch
{
}
}
مدت زیادی که دنبال راه حل می گردم ولی جوابی نگرفتم !!!!!!!!!!!!!!!!!!!
خواهشا کمک کنید حل بشه
ممنون میشم
من یه پروژه وب با asp.net و C# نوشتم
در یه قسمت از پروژه لینکی وجود داره که با کلیک روی این لینک اطلاعات از sql خونده میشه و داخل template از فایل docx قرار میگیره ، برای این کار هم از اسمبلی مایکروسافت microsoft.office.interop.word استفاده کردم .
این برنامه ، لوکال و با استفاده از vs که اجرا میشه هیچ مشکلی نداره . ولی وقتی روی همون سیستم ست آپ می سازم و روی IIS میزارم ، لینک مورد نظر رو که کلیک می کنم هیچ اتفاقی نمی افته و خبری از فایل docx نیست.
تنظیمات application pool در IIS هم net4 و 32bitappهم true و identity هم روی local system هست
کد هم اینه:
Object oMissing = System.Reflection.Missing.Value;
Object oTrue = true;
Object oFalse = false;
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document();
oWord.Visible = true;
try
{
Object oTemplatePath = Server.MapPath("\\shenasname.dotx");
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Word.Field myMergeField in oWordDoc.Fields)
{
Word.Range rngFieldCode = myMergeField.Code;
String fieldText = rngFieldCode.Text;
if (fieldText.StartsWith(" MERGEFIELD"))
{
Int32 endMerge = fieldText.IndexOf("\\");
Int32 fieldNameLength = fieldText.Length - endMerge;
String fieldName = fieldText.Substring(11, endMerge - 11);
fieldName = fieldName.Trim();
if (fieldName == "ComputerName")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[1].Text);
}
if (fieldName == "IP")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[2].Text);
}
if (fieldName == "PrizNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[23].Text);
}
if (fieldName == "SwitchNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[24].Text);
}
if (fieldName == "PatchNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[25].Text);
}
if (fieldName == "MouseNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "SpeakerNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "KeyboardNum")
{
myMergeField.Select();
oWord.Selection.TypeText(" ");
}
if (fieldName == "MonitorNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[27].Text);
}
if (fieldName == "CaseNum")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[26].Text);
}
string mainuser = null;
string user = null;
for (int i = 0; i < grdpeigiri.Rows.Count; i++)
{
if (grdpeigiri.Rows[i].Cells[5].Text.Contains("*"))
{
mainuser = grdpeigiri.Rows[i].Cells[4].Text;
}
else
{
if (user == null)
{
user = user + grdpeigiri.Rows[i].Cells[4].Text;
}
else
{
user = user + " - " + grdpeigiri.Rows[i].Cells[4].Text;
}
}
}
if (user == null) user = "-";
if (fieldName == "Section")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[7].Text);
}
if (fieldName == "MainUser")
{
myMergeField.Select();
oWord.Selection.TypeText(mainuser);
}
if (fieldName == "OtherUser")
{
myMergeField.Select();
oWord.Selection.TypeText(user);
}
if (fieldName == "MainBoard")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[18].Text);
}
if (fieldName == "CPU")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[10].Text);
}
if (fieldName == "RAM")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[11].Text);
}
if (fieldName == "HDD")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[13].Text);
}
if (fieldName == "VGA")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[12].Text);
}
if (fieldName == "Sound")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[20].Text);
}
if (fieldName == "Lan")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[19].Text);
}
if (fieldName == "Case")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[8].Text);
}
if (fieldName == "Monitor")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[9].Text);
}
if (fieldName == "ODD")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[21].Text);
}
if (fieldName == "Scanner")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[15].Text);
}
if (fieldName == "Speaker")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[16].Text);
}
if (fieldName == "Modem")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[22].Text);
}
if (fieldName == "UPS")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[17].Text);
}
if (fieldName == "Printer")
{
myMergeField.Select();
oWord.Selection.TypeText(grdpeigiri.Rows[RowIndex].Cells[14].Text);
}
}
}
}
catch
{
}
}
مدت زیادی که دنبال راه حل می گردم ولی جوابی نگرفتم !!!!!!!!!!!!!!!!!!!
خواهشا کمک کنید حل بشه
ممنون میشم