PDA

View Full Version : سوال: باز شدن نرم افرار word داخل فرم



f_naderi
دوشنبه 01 شهریور 1395, 12:29 عصر
سلام دوستان
می خوام توی برنامم نرم افزار word رو باز کنم (ورد داخل خود فرم نمایش داده بشه نه به صورت یک پنجره مجزا) :
var wordApp = new Microsoft.Office.Interop.Word.Application();

object useDefaultValue = Type.Missing;
wordApp.Caption = "Caption";
//wordApp.StatusBar = "StatusBar";
var Word_doc = wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue,
ref useDefaultValue, ref useDefaultValue);
Range range = Word_doc.Range(ref useDefaultValue, ref useDefaultValue);
// range.Text = "smail" + Environment.NewLine + "Hallo";
wordApp.Visible = true;

با استفاده از کد بالا نرم افزار ورد به صورت جداگانه باز میشه. ممنون میشم راهنمایی بفرمایید

f_naderi
دوشنبه 01 شهریور 1395, 15:40 عصر
سلام دوستان
من کامپوننتش رو پیدا کردم ولی حالا می خوام فایل ورد رو مشخص کنم که نمایش بده (فایل وردی که در مسیر برنامم وجود داره)
این کد رو نوشتم ولی خطا میده:
private void Form1_Load(object sender, EventArgs e) {
string oTemplatePath = System.Windows.Forms.Application.StartupPath + "\\1.docx";
winWordControl1.LoadDocument(oTemplatePath);

}

f_naderi
دوشنبه 01 شهریور 1395, 15:53 عصر
مشکل حل شد.
من از این dll استفاده کردم .اینجا قرار دادم شاید دوستان دیگه هم نیاز پیدا کردن.

mr.sirwan
دوشنبه 01 شهریور 1395, 18:39 عصر
مشکل حل شد.
من از این dll استفاده کردم .اینجا قرار دادم شاید دوستان دیگه هم نیاز پیدا کردن.

درود دوست عزیز، لطفا طرز کار با این کنترل رو هم کمی شرح بدین، منم لازم دارم... تا الان از خود برنامه Word به صورت جدا در نرم افزارم استفاده کردم اگه این کنترل جواب بده روند کارو تغییر میدم

mrprestige
دوشنبه 01 شهریور 1395, 19:31 عصر
درود دوست عزیز، لطفا طرز کار با این کنترل رو هم کمی شرح بدین، منم لازم دارم... تا الان از خود برنامه Word به صورت جدا در نرم افزارم استفاده کردم اگه این کنترل جواب بده روند کارو تغییر میدم

عرض سلام و ادب دوست عزیز , بنده متاسفانه DLL دوست عزیز f_naderi (http://barnamenevis.org/member.php?91364-f_naderi) رو متاسفانه نگاه نکردم و اینکه از ایشون تشکر میکنم که تجربیاتشون رو دراختیار بقیه میزارن ولی با این حال دوست من شما به این سایت (https://www.nuget.org/packages/Microsoft.Office.Interop.Word/) هم مراجعه کنید dll رو دانلود سپس با استفاده از همین دستوری که براتون نوشتم فیل Word مورد نظرتون رو باز کنید


this.Application.Documents.Open(@"C:\Test\NewDocument.docx");

پیروز و موفق باشید

mr.sirwan
دوشنبه 01 شهریور 1395, 23:17 عصر
عرض سلام و ادب دوست عزیز , بنده متاسفانه DLL دوست عزیز f_naderi (http://barnamenevis.org/member.php?91364-f_naderi) رو متاسفانه نگاه نکردم و اینکه از ایشون تشکر میکنم که تجربیاتشون رو دراختیار بقیه میزارن ولی با این حال دوست من شما به این سایت (https://www.nuget.org/packages/Microsoft.Office.Interop.Word/) هم مراجعه کنید dll رو دانلود سپس با استفاده از همین دستوری که براتون نوشتم فیل Word مورد نظرتون رو باز کنید


this.Application.Documents.Open(@"C:\Test\NewDocument.docx");

پیروز و موفق باشید

سلام و درود دوست خوبم ممنون برای لینک و راهنمایی که گذاشتین، ولی این خط به تنهایی کار نمیکنه و مستلزم یک کنترل یا یک ابجکت هستش، درضمن خود من از همین DLL برای کار با Word استفاده میکنم اما به روشی دیگه، چیزی که درمورد پست دوست عزیزمون f_naderi (http://barnamenevis.org/member.php?91364-f_naderi) برام جالب بود این بود که منم قبل از استفاده از روش فعلیم، میخواستم کامپوننت برنامه Word رو پیدا کنم و داخل نرم افزارم قرار بدم چون توی یکی از برنامه های تحت دسکتاپ دیده بودم که همچین کامپوننتی استفاده شده، ولی بنده که طی جستجو هام چیزی پیدا نکردم و بیخیال شدم و اومدم سراغ همین روش فعلی خودم

بازم ممنون

f_naderi
دوشنبه 01 شهریور 1395, 23:37 عصر
سلام من خودمم امروز این dll رو پیدا کردم .
اول اومدم این dll رو به رفرنس های برنامم اضافه کردم بعد در قسمت tool box کلیک راست کردم و با انتخاب choose item در پنجره باز شده در قسمت .Net tab از قسمت brows این dll رو انتخاب کردم و ok.
بعد کامپوننت winwordcontrol به toolbox اضافه میشه این کامپوننت رو داخل فرم قرار دادم و یک دکمه هم گذاشتم که زیر این دکمه کد زیر رو قرار دادم:
private void button1_Click(object sender, EventArgs e) {
string oTemplatePath = System.Windows.Forms.Application.StartupPath + "\\1.docx";
winWordControl1.LoadDocument(oTemplatePath);
}
بیش از این نمیدونم چون هنوز باهاش کار نکردم اگر اطلاعات بیشتری به دست بیارم همینجا میذارم. یه فایل dll دیگه داشتم که تا دیشب اونو تست میکردم ولی با اون موفق نشدم داخل خود فرم فایل رو باز کنم ولی notepad رو داخل فرم باز میکرد اونو هم براتون قرار میدم شاید شما به نتیجه ای برسید.
حالا من یک سوال دیگه دارم :افسرده: من می خوام متن رو در دیتابیس اکسس ذخیره کنم (محتویاتش قراره سوال درسی باشه که شامل فرمول و تابع و... هستش) بنظرتون فقط متن رو بخونم و ذخیره کنم یا به ازای هر سوال کل فایل رو ذخیره کنم .روش انجام هیچ کدوم رو هم نمیدونم. ممنون میشم راهنمایی بفرمایید

f_naderi
دوشنبه 01 شهریور 1395, 23:54 عصر
با استفاده از دستور زیر یک فایل ورد به صورت مجزا باز میشه :
this.Application.Documents.Open(@"C:\Test\NewDocum ent.docx");
اینم فایل dll قبلی

abdullah20
سه شنبه 02 شهریور 1395, 00:16 صبح
بهترین کامپوننت برای این کار EDraw Office Viewer هستش

f_naderi
سه شنبه 02 شهریور 1395, 00:19 صبح
بهترین کامپوننت برای این کار EDraw Office Viewer هستش


ببخشید دوباره مطرح کردم ...من می خوام متن رو در دیتابیس اکسس ذخیره کنم (محتویاتش قراره سوال درسی باشه که شامل فرمول و تابع و... هستش) بنظرتون فقط متن رو بخونم و ذخیره کنم یا به ازای هر سوال کل فایل رو ذخیره کنم .روش انجام هیچ کدوم رو هم نمیدونم. ممنون میشم راهنمایی بفرمایید.

abdullah20
سه شنبه 02 شهریور 1395, 00:26 صبح
نه دوست عزیز برای چی برای هر سوال کل فایل که شامل سوالات هست ذخیره بشه
شما هر سوال را جداگانه ذخیره کنید
نرم افزار ازمون گیر دارید می نویسید؟
با توجه به این تاپیک (http://barnamenevis.org/showthread.php?528862-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%A7%D8%B2-%DA%86%DA%A9-%D8%A8%D8%A7%DA%A9%D8%B3-%DA%AF%D8%B1%D9%88%D9%BE-%D8%AF%D9%88%D9%85-%D8%A8%D8%B1%D8%A7%D8%B3%D8%A7%D8%B3-%DA%86%DA%A9-%D8%A8%D8%A7%DA%A9%D8%B3-%DA%AF%D8%B1%D9%88%D9%BE-%D8%A7%D9%88%D9%84) که ایجاد کردید لازمه کلا درمورد نرم افزار خودتون توضیح بدید که چی هستش تا بهتر بشه راهنمایی کرد

f_naderi
سه شنبه 02 شهریور 1395, 00:45 صبح
یعنی اگه فقط محتویات فایل خونده و ذخیره بشه موقع بازیابی به مشکل برنمیخوره(محتویات فایل به هم بریزه به خاطر توابع ریاضی که قراره ذخیره بشه میگم)
بله دارم چنین پروژه ای مینویسم. توی یه فرم لیست کتابها وارد میشه.توی فرم بعدی براساس کتاب شماره و کد فصل ذخیره میشه و بعد براساس فصل انتخابی بخش های مورد نظر وارد میشه.حالا موقع ایجاد آزمون به مشکلی که توی اون تاپیک نوشتم برخورد کردم اگه فقط براساس کتاب و فصل بود مشکلی نبود ولی چون بخش هم وارد شده نمیدونم چکار کنم.

abdullah20
سه شنبه 02 شهریور 1395, 09:55 صبح
اگر نرم افزار آزمون گیر میخواید بنویسید یک دوره ای در سایت هستش که جناب veniz2008 تدریس کردن
میتونید از اون کمک بگیرید

f_naderi
سه شنبه 02 شهریور 1395, 10:41 صبح
ممنون ولی فوق العاده عجله ای هست.
چطور میتونم فایل ورد رو بخونم چون با دستور string readText = File.ReadAllText(Path); متنی رو نمیده به این دلیل که فایل خالی هست و این فایل داخل کامپوننت winwordcontrol باز میشه و بعد از باز شدن داره صورت سوال واردش میشه.حالا چطور میتونم موقع زدن دکمه ثبت سوال متن درون ورد را بخونم و ذخیره کنم.

mr.sirwan
سه شنبه 02 شهریور 1395, 10:54 صبح
ممنون ولی فوق العاده عجله ای هست.
چطور میتونم فایل ورد رو بخونم چون با دستور string readText = File.ReadAllText(Path); متنی رو نمیده به این دلیل که فایل خالی هست و این فایل داخل کامپوننت winwordcontrol باز میشه و بعد از باز شدن داره صورت سوال واردش میشه.حالا چطور میتونم موقع زدن دکمه ثبت سوال متن درون ورد را بخونم و ذخیره کنم.

متاسفانه فرصت نشد با این کنترلی که گذاشتین کار کنم، قبلا ارور میداد و دیگه پیشو نگرفتم پس نمیدونم روش کارش چجوری هستش، اما شما سعی کنین برای هر سوال مراحل زیر رو طی کنین:
1. متن داخل کنترل رو به عنوان یک فایل ذخیره کنین
2. متنشو از رو سیستم بخونین
3. فایل ذخیره شده رو از رو سیستم حذف کنین
4. حالا اطلاعات دریافت شده رو داخل دیتابیس درج کنین

f_naderi
سه شنبه 02 شهریور 1395, 11:13 صبح
شما اول فایل ورد رو سیو میکردین بعد میخوندین؟ من با این دستوری که نوشتم متن سیو شده رو خوندم و داخل تکست باکس نشون دادم کلا فونتش به هم ریخت نمی خوام اینجوری بشه ... موقع درج توی بانک به هم نمیریزه؟ جناب abdullah20 فرمودن محتویات رو ذخیره کنم .حالا به نظر شما چطور، متن رو ذخیره کنم یا کل فایل رو برای هر سوال.
ممنون بابت راهنمایی

mr.sirwan
سه شنبه 02 شهریور 1395, 11:26 صبح
شما اول فایل ورد رو سیو میکردین بعد میخوندین؟ من با این دستوری که نوشتم متن سیو شده رو خوندم و داخل تکست باکس نشون دادم کلا فونتش به هم ریخت نمی خوام اینجوری بشه ... موقع درج توی بانک به هم نمیریزه؟
ممنون بابت راهنمایی

عرض کردم با کنترل شما کار نکردم نمیدونم روش کارش چجوری هستش، اگر کنترلتون این امکان رو داره که محتویات خودش رو توسط یک پراپرتی به برنامه نویس تحویل بده، پس از همین پراپرتی استفاده کنین، در غیر اینصورت مجبور به انجام مراحل ذکر شده هستین، درمورد به هم ریختن فونت و از این قبیل، باز هم اگر کنترل شما پراپرتی ای واسه Set کردن خاصیت Text داره پس محتویات خونده شده رو توسط همین پراپرتی به کنترلتون پاس بدین(مثلا: SetText یا Text و...)، یا میتونین داخل یک Richtextbox قرار بدین محتویاتتون داخل این کنترل بهتر نمایش داده میشه

f_naderi
سه شنبه 02 شهریور 1395, 13:26 عصر
چطور میتونم فایل رو ذخیره کنم هر کدی می نویسم خطا میده؟؟؟؟؟

mr.sirwan
سه شنبه 02 شهریور 1395, 14:11 عصر
چطور میتونم فایل رو ذخیره کنم هر کدی می نویسم خطا میده؟؟؟؟؟

لطفا کد مربوط به ذخیره کردن رو قررار بدین تا بررسی کنیم

f_naderi
سه شنبه 02 شهریور 1395, 14:47 عصر
private void button2_Click(object sender, EventArgs e)

{
object oTemplatePath = System.Windows.Forms.Application.StartupPath + "\\1.docx";
Microsoft.Office.Interop.Word.Document doc = winWordControl1.LoadDocument(oTemplatePath);
doc.Save();




}
کلا نحوه ذخیره سازیش رو نمیدونم . اگر نمونه کد برام بزارید ممنون میشم

mr.sirwan
سه شنبه 02 شهریور 1395, 15:15 عصر
شما از این کد استفاده کنین:

Object oMissing = System.Reflection.Missing.Value;
Object oSaveFile = (Object) Application.StartupPath + "\\1.docx";

doc.SaveAs2(ref oSaveFile, 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, ref oMissing);

f_naderi
سه شنبه 02 شهریور 1395, 15:30 عصر
چطوری میتونم متغیر doc رو مقدار بدم از طریق winwordcontrol که مقدار میگیره خطا میده

Error 1 The best overloaded method match for 'WinWordControl.WinWordControl.LoadDocument(string )' has some invalid arguments
Error 2 Argument '1': cannot convert from 'object' to 'string'
Error 3 'Microsoft.Office.Interop.Word.Document' does not contain a definition for 'SaveAs2' and no extension method 'SaveAs2' accepting a first argument of type 'Microsoft.Office.Interop.Word.Document' could be found (are you missing a using directive or an assembly reference?)

private void button2_Click(object sender, EventArgs e)


{
Object oSaveFile = (Object)Application.StartupPath + "\\1.docx";
Microsoft.Office.Interop.Word.Document doc = winWordControl1.LoadDocument(oSaveFile);
Object oMissing = System.Reflection.Missing.Value;
doc.SaveAs2(ref oSaveFile, 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, ref oMissing);


}

mr.sirwan
چهارشنبه 03 شهریور 1395, 00:31 صبح
دوست عزیز، متاسفانه این کنترلی که گذاشتین واسه من ارور میده، چندین بار امتحان کردم خواستم روال کارشو بفهمم و بیام واستون توضیح بدم ولی از شانس شما واسه من تو محیط دیزاین اجرا ارور میده

142149

از دوستان خواهش میشه کنترل موردنظر رو دریافت کنن و کار دوستمون رو راه بندازن

f_naderi
پنج شنبه 04 شهریور 1395, 01:09 صبح
جناب سیروان ودیگر دوستان ممنون از پیگیری هاتون...
ویندوز من 32 هستش و برنامه رو روی حالت x86 قرار دادم ، برنامه رو اجرا میکنه ولی قبلش این پیفام رو میده. مشکل از چیه ؟

سوال دومم اینه که ، من وقتی فایل setup رو میسازم پوشه دیباگ خالیه و فایلها رو توی پوشه Release قرار میده.چرا؟ و مطلب دیگه اینکه من می خوام کریستال ریپورت رو هم توی کامپیوتر مقصد نصب کنه ، اگه کامپیوتر مقصد کریستال ریپورت روش نصب نباشه مشکلی پیش نمیاد ولی رو سیستم خودم که می خوام نصب کنم ، نصب رو انجام نمیده و پیغام زیر رو میده:
142165

abdullah20
پنج شنبه 04 شهریور 1395, 03:35 صبح
ارور کریستال برای اینه ک میگه نصب شده و مجدد نمیشه نصب کرد
برای سیستم کاربر هم باید موتورش را نصب کنید و نیاز ب نصب نسخه کامل نیست
برای بیلد هم حالت release را انتخاب کردید ک البته فرق زیادی با حالت دیباگ نداره ولی معمولا برای بیلد نهایی از releaseاستفاده میشه

f_naderi
پنج شنبه 04 شهریور 1395, 11:33 صبح
بله اررورش به خاطر اینه که روی سیستم خودم نصبه ... من گزینه crystal report basic for visual st... رو تیک میزنم .چکار کنم که اگه روی سیستم کریستال نصب بود نصبش نکنه؟(چطور میتونم مشخص کنم که فقط موتورش رو نصب کنه)

اون تصویر دوم رو که قرار دادم اون برای چیه؟(وقتی برنامه رو اجرا می کنم این پیغام رو میده ولی بعدش برنامه رو اجرا میکنه .البته وقتی فایل نصبی ایجاد کنم و برنامه رو نصب و اجرا کنم این پیغام رو نمیده)

f_naderi
جمعه 05 شهریور 1395, 15:25 عصر
سلام دوستان من منصرف شدم از اینکه بخوام ورد رو داخل خود فرم باز کنم چون از اون کنترل winword که استفاده کردم بعد از نصب فرم مربوطه رو باز نمیکرد و اررور میداد حالا من از کد زیر استفاده میکنم که نرم افزار ورد رو جداگانه باز کنم حالا چطور محتویاتش رو بخونم و داخل دیتابیس ذخیره کنم .خواهش میکنم اگه کسی میدونه قطعه کد قرار بده چون واقعا به نتیجه ای نرسیدم
private void button1_Click(object sender, EventArgs e) {
var wordApp = new Microsoft.Office.Interop.Word.Application();


object useDefaultValue = Type.Missing;
wordApp.Caption = "Caption";
//wordApp.StatusBar = "StatusBar";
var Word_doc = wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue,
ref useDefaultValue, ref useDefaultValue);
Range range = Word_doc.Range(ref useDefaultValue, ref useDefaultValue);
// range.Text = "smail" + Environment.NewLine + "Hallo";
wordApp.Visible = true;
}

mr.sirwan
جمعه 05 شهریور 1395, 16:52 عصر
الان شما فقط نیاز دارین که فایل رو روی سیستم کاربر ذخیره و سپس فایل ذخیره شده رو به آرایه ی بایتی تبدیل و این آرایه رو داخل دیتابیس ذخیره کنین، بدین صورت:

Object oSavePath = (Object)String.Format("{0}\\MyDocument.doc", Application.StartupPath);

Word_doc.SaveAs2(ref oSavePath, 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, ref oMissing);

Word_doc.Close(ref oFalse, ref oMissing, ref oMissing);

WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);

byte[] FileBuffer = System.IO.File.ReadAllBytes(oSavedFile.ToString()) ;

داخل فرمتون یک دکمه اضافه کنین و این کدهارو داخل ایونت کلیکش پیست کنین و آرایه رو داخل دیتابیس درج کنین، لازم به ذکره که در این روش فرقی نمیکنه که کاربر برنامه ورد رو ببنده یا خیر، در هر صورت به درستی کار میکنه، ولی توصیه میکنم که به کاربر اطلاع بدین که برنامه ورد رو نبنده، یعنی هنگامی که برنامه ورد در حال اجراس بیاد و این دکمه رو کلیک کنه.


موفق باشین

f_naderi
جمعه 05 شهریور 1395, 19:44 عصر
من کد رو به این صورت زیر دکمه ثبت سوال نوشتم ولی برای SaveAs2 اررور میده و این دو تابع close و quit رو هم به صورت سبز نشون میده چی کم یا اشتباهه:


//////////////////////////////for QTS field var wordApp = new Microsoft.Office.Interop.Word.Application();




object oMissing = Type.Missing;
object oFalse = false;
object useDefaultValue = Type.Missing;
wordApp.Caption = "Caption";
//wordApp.StatusBar = "StatusBar";
var Word_doc = wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue,
ref useDefaultValue, ref useDefaultValue);
Range range = Word_doc.Range(ref useDefaultValue, ref useDefaultValue);
Object oSavePath = (Object)System.Windows.Forms.Application.StartupPa th + "\\1.docx";
Word_doc.SaveAs2(ref oSavePath, 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, ref oMissing);


Word_doc.Close(ref oFalse, ref oMissing, ref oMissing);


WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);


byte[] FileBuffer = System.IO.File.ReadAllBytes(oSavePath.ToString());





//////////////////////////////
خط save رو کردمWord_doc.Save(); حالا برنامه اجرا میشه ولی وقتی سوال رو وارد میکنم و دکمه ثبت رو میزنم هنگ میکنه نه اررور میده و نه بقیه دکمه ها کار میکنن. داخل دیتابیس نوع فیلد رو ole object قرار دادم و موقع ذخیره سازی متغیر FileBuffer را برای ذخیره مشخص میکنم.مشکل از کجاست؟

mr.sirwan
جمعه 05 شهریور 1395, 22:03 عصر
متن اروری که با متد SaveAs2 نشون داده میشه رو بذارین، تا بهتر راهنمایی کنیم

درمورد ابجکت oMissing و useDefaultValue جفتشون یک مقدار دارن پس فقط از یکیشون استفاده کنین لزومی نداره از هر دو استفاده کنین، اون خط سبز هم که زیر متد های Close و Quit میاره، اشکالی ایجاد نمیکنه نگران نباشید، فیلد موجود در جدولتون رو هم از نوع varbinary(MAX) بگیرین...

درمورد ذخیره سازی فایل هم شما اول WordApp.Visible= true کنین، در ضمن این کدی که شما نوشتین اصلا کاربر فرصت نمیکنه چیزی داخل فایل بنویسه که فورا سیو میشه، دکمه فراخوانی برنامه Word و دکمه ذخیره سازی باید مجزا باشن، امیدوارم منظورمو رسونده باشم

f_naderi
شنبه 06 شهریور 1395, 14:15 عصر
ممنون جناب سیروان مشکل اررور حل شد ذخیره میکنه . من از access استفاده میکنم و به همین دلیل دیتاتایپ رو ole object گذاشتم. بله برای باز کردن ورد یک دکمه مجزا گذاشته بودم اون مال ثبت سوال بود.
حالا به مشکل دیگه ای برخوردم سوال1. وقتی سوال ثبت میشه document رو میبنده ولی نرم افزار ورد رو خیر.(یعنی صفحه خاکستری رنگ محیط ورد باز میمونه که البته می خوام داکیومنت رو دوباره باز کنه به صورت خالی که برای تایپ سوال بعدی آماده باشه)
سوال2. حالا من می خوام سوال ثبت شده رو از دیتابیسم بخونم و داخل ورد نمایش بدم ولی این رو داخل ورد نمایش میده :System.Byte[]

کدی که برای نمایش سوال در ورد نوشتم:
object path = (Object)System.Windows.Forms.Application.StartupPa th + "\\1.docx"; object read = "ReadWrite";
object readOnly = false;
object o = System.Reflection.Missing.Value;
Class1.str1 = "select top 1 Qts from Quastion where l_code=" + Convert.ToInt32(comboBox3.SelectedValue);
Class1.da = new System.Data.OleDb.OleDbDataAdapter(Class1.str1, Class1.con);
Class1.da.Fill(Class1.dsclass);
Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application(); ;


object oMissing = Type.Missing;

oWord.Visible = true;
oWord.Documents.Open(ref path, ref o, ref readOnly, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);
byte[] bytes = (byte[])Class1.dsclass.Tables[0].Rows[0][0];
//string s = BitConverter.ToString();
string text = Encoding.Unicode.GetString(bytes);
oWord.Selection.TypeText(text);

mr.sirwan
یک شنبه 07 شهریور 1395, 13:21 عصر
سلام دوست خوبم، شرمنده به خاطر وقفه ای که ایجاد شد، به ترتیب پاسخ میدم:
1. خب اینکه خوبه، شما بعد از ثبت هر سوال ابجکت Word_Doc رو دوباره New کنین و به WordApp اضافه کنین(اگه واضح نبود بفرمایید تا واضحتر بگم)
2. دوست خوبم توجه داشته باشین که این روندی که ما پیش گرفتیم به ازای هر سوال یک فایل word خواهیم داشت شاید این چیزی نباشه که شما میخواین، ولی به هر حال تبدیل Byte به یک فایل بدین صورت انجام میشه:


string FilePath = string.Format("{0}\\TempDoc.Doc", Application.StartupPath);
System.IO.File.WriteAllBytes(FilePath, bytes);


حالا برای نمایش این فایلمون میتونیم به دو روش زیر عمل کنیم:

1) با استفاده از Proccess

var viewer = System.Diagnostics.Process.Start(FilePath);

// حذف فایلی که ساختیم درست بعد از بستن نرم افزار ورد
viewer.EnableRaisingEvents = true;
viewer.Exited += (o, args) =>
{
System.IO.File.Delete(FilePath);
};


2) و یا با همین روش خودمون پیش بریم و باز کنیم:

oWord = new Microsoft.Office.Interop.Word.Application();
oWordDoc = new Microsoft.Office.Interop.Word.Document();


oWordDoc = oWord.Documents.Add(ref FilePath, ref oMissing, ref oMissing, ref oMissing);

oWord.Visible = true;


ولی اگر نخوایم این روند رو پیش بگیریم توصیه میکنم سری به این لینکها بزنین:


(http://stackoverflow.com/questions/1011234/how-to-extract-text-from-ms-office-documents-in-c-sharp)http://stackoverflow.com/questions/1011234/how-to-extract-text-from-ms-office-documents-in-c-sharp

http://mantascode.com/c-how-to-parse-the-text-content-from-microsoft-word-document (http://mantascode.com/c-how-to-parse-the-text-content-from-microsoft-word-document/)

f_naderi
یک شنبه 07 شهریور 1395, 15:08 عصر
ممنون بابت همراهیتون.
متاسفانه من دیگه الان هنگ کردم. برای ذخیره سازی اینطور نوشتم که اررور نداد: object oMissing = Type.Missing; object oFalse = false;
object useDefaultValue = Type.Missing;
Microsoft.Office.Interop.Word._Application w = new Microsoft.Office.Interop.Word.Application();
object path = (Object)System.Windows.Forms.Application.StartupPa th + "\\1.docx";
object read = "ReadWrite";
object readOnly = false;
object o = System.Reflection.Missing.Value;

oDoc.Save();
w.Visible = false;
oDoc.Close(ref oFalse, ref oMissing, ref oMissing);


w.Quit(ref oMissing, ref oMissing, ref oMissing);

byte[] FileBuffer = System.IO.File.ReadAllBytes(path.ToString());

همون متغیر filedbuffer رو هم دارم ذخیره میکنم . حالا دارم از دیتابیس می خونم یعنی آدرس من میشه Class1.dsclass.Tables[0].Rows[0][0] نمیدونم اینو چطور به رشته تبدیل کنم.
به نظر شما بهتر نیست که رشته بخونم به بایت تبدیل کنم و ذخیره کنم و بعد برای بازیابی به رشته برگردونم.
برای ذخیره سازی:
string somestring = System.IO.File.ReadAllText(path, Encoding.ASCII);
byte[] FileBuffer = Encoding.ASCII.GetBytes(somestring);

برای بازیابی:
byte[] bytes = (byte[])Class1.dsclass.Tables[0].Rows[0][0];
string text = Encoding.ASCII.GetString(bytes);
oWord.Selection.TypeText(text);
البه بازم system.byte[] نشون میده

mr.sirwan
یک شنبه 07 شهریور 1395, 15:59 عصر
سلام دوست عزیز، ببینین اصلا سخت نگیرین، بیاین روال کارو یه بار دیگه باهم بررسی کنیم، کاری که ما میخوایم انجام بدیم اینه که یک فایل یا سند Word (در اینجا برای کد شما همون ابجکت Word_Doc یا در کد من همون oWordDoc) در مسیر دلخواهمون (ابجکت Path که بصورت string بهش ادرس دادیم ولی نوع متغیرمون Object هستش که در متدهای بعدی نیاز داریم که متغیرمون از جنس آبجکت باشه) ایجاد و ذخیره کنیم و درصورت لزوم فراخوانیش کنیم

ابتدای کار ما میخوایم یک سند خالی داخل Word برای کاربر باز کنیم که بتونه داخلش بنویسه برای اینکار داخل ایونت کلیک یک دکمه، بدین صورت عمل میکنیم:


Microsoft.Office.Interop.Word.Application oWordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();

Object oMissing = System.Reflection.Missing.Value;
oWordDoc = oWordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
oWordApp.Visible = true;


حالا ما یک سند خالی داریم که کاربر داخلش میتونه محتویات موردنظرشو بنویسه، حالا فرض کنین کاربر محتویات رو نوشته و میخواد که فایل رو داخل دیتابیس ذخیره کنه (البته این کار واسه برنامه آزمون گیر مناسب نیستش و باید به طریق دیگه ای فقط محتویات داخل سند رو بخونیم و اونو بصورت رشته داخل دیتابیس ذخیره کنیم، این روش رو هم خدمتتون عرض خواهم کرد) برای اینکار ابتدا باید فایل رو داخل سیستم کاربر بصورت موقت ذخیره کنیم، سپس اون فایل رو تبدیل به آرایه Byte کنیم و این آرایه رو داخل دیتابیس ذخیره کنیم (تا کاربر هرموقع خواست فایل رو ببینه این آرایه رو دوباره به فایل تبدیل کنیم و بهش نشون بدیم) و در نهایت فایل موقت ایجاد شده رو حذف کنیم، برای اینکار داخل ایونت کلیک یک دکمه مجزا از فراخوانی سند، بدین صورت عمل میکنیم:


Object oSavePath = (Object)String.Format("{0}\\MyDocument.doc", System.Windows.Forms.Application.StartupPath);

oWordDoc.SaveAs2(ref oSavePath, 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, ref oMissing);

Object oFalse = false;

oWordDoc.Close(ref oFalse, ref oMissing, ref oMissing);

//oWordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
byte[] FileBuffer = System.IO.File.ReadAllBytes(oSavePath.ToString());
System.IO.File.Delete(oSavePath.ToString());


اون خط کدی که کامنت کردم اختیاریه شما میتونی اونو بنویسی یا ننویسی، اگه میخواین بعد از ثبت هر سوال خود برنامه Word هم بسته بشه خط رو از حالت کامنت دربیارین، درغیر اینصورت بذارین تو حالت کامنت بمونه
خب اینا مربوط به ذخیره فایل در سیستم کاربر و بدست آوردن ارایه Byte مربوط به فایل، و حذف فایل از سیستم، دیگه ذخیره سازی آرایه بایتی در دیتابیس به عهده خودتون

حالا میرسیم به باز کردن سندی که داخل دیتابیس به صورت آرایه ذخیره شده، برای اینکار ابتدا بیاین ستون مربوطه رو از دیتابیس بخونین، فرض کنیم شما مقدار ستونی که از دیتابیس فراخوانی کردین رو داخل آرایه ای از جنس Byte با اسم Bytes ریختین، حالا برای تبدیل این آرایه به فایل از متد WriteAllBytes استفاده میکنیم که فایل رو برامون میسازه، به این صورت:



string FilePath = string.Format("{0}\\TempDoc.Doc", Application.StartupPath);
System.IO.File.WriteAllBytes(FilePath, Bytes);




حالا برای نمایش این فایلمون میتونیم به دو روش زیر عمل کنیم:

1) با استفاده از Proccess

var viewer = System.Diagnostics.Process.Start(FilePath);

// حذف فایلی که ساختیم درست بعد از بستن نرم افزار ورد
viewer.EnableRaisingEvents = true;
viewer.Exited += (o, args) =>
{
System.IO.File.Delete(FilePath);
};


2) و یا با همین روش خودمون پیش بریم و باز کنیم:


oWordApp = new Microsoft.Office.Interop.Word.Application();
oWordDoc = new Microsoft.Office.Interop.Word.Document();

oWordDoc = oWord.Documents.Add(ref FilePath, ref oMissing, ref oMissing, ref oMissing);
oWord.Visible = true;


که البته پیشنهاد میکنم از روش اول استفاده کنین
به همین راحتی، اما اگه اینو نخوایم و فقط متن فایل رو بخوایم استخراج کنیم، به جای ذخیره سازی کل فایل، توسط کد زیر فقط متن رو میخونیم و داخل دیتابیس ذخیره کنین(توجه داشته باشین که متنتون دیگه جلوه نخواهد داشت، منظورم رنگ و حالت بولد و مورب بودن هستش، وگرنه فرمول ها تغییری نمیکنن)

string totalText = oWordDoc.Content.Text;

راستی این رو هم بگم که ابجکت های oWordApp و oWordDoc و oMissing رو به صورت سراسری تعریف کنین

f_naderi
یک شنبه 07 شهریور 1395, 16:46 عصر
اومدم نوع فیلد رو تغییر دادم به memo و string s=oDoc.Content.Text; این رو درج کردم و با این دستور فراخوانیش کردم string s=Class1.dsclass.Tables[0].Rows[0][0].ToString();
oWord.Selection.TypeText(s);
یه فرمول از قسمت insert قرار دادم موقع بازیابی فقط x و y و جمع و تفریق رو آورد رادیکال و این چیزا رو نیاورد و هر قسمت فرمول رو داخل یک خط جدید نوشت
هنوز اون راه اول رو امتحان نکردم ان شااله نتیجه بده .میگم من دارم هر بار فایل 1.docx رو save میکنم نه save as حالا وقتی بخواد سوال ذخیره شده رو نشون بده (بعد از استخراج از دیتابیس)چون مسیر فایل ذخیره شده نه محتواش ،به مشکل بر نمیخوره؟

mr.sirwan
یک شنبه 07 شهریور 1395, 20:44 عصر
خب دوست عزیز چرا از Save استفاده میکنین؟؟؟ من خودم از همین روش استفاده میکنم و تا حالا واسه SaveAs2 به ارور نخوردم نمیدونم اروری که شما دارین چیه؟ همینطور اینکه متن ارور رو نمیذارین اینجا که ببینیم

آیا سوال رو درست متوجه شدم؟ شما به جای اینکه خود فایل رو در دیتابیس ذخیره کنین، فقط مسیر فایل رو داخل دیتابیس میذارین و فایل اصلی رو همینطوری میذارین رو سیستم بمونه؟؟؟ اگه درست متوجه شده باشم، خیر تا زمانیکه فایل حذف نشه موردی نداره

f_naderi
یک شنبه 07 شهریور 1395, 22:29 عصر
من نقطه رو که میزنم فقط save;save as ;saveas2000 داره به همین دلیل تابع saveas2 رو نمیشناسه.
حالا من کد رو طبق فرمایش شما تغییر دادم بدین صورت: دکمه باز کردن نرم افزار ورد:
Microsoft.Office.Interop.Word.Application oWordApp = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();


Object oMissing = System.Reflection.Missing.Value;
oWordDoc = oWordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
oWordApp.Visible = true;
دکمه ثبت فایل ورد:
Object oSavePath = (Object)String.Format("{0}\\1.docx", System.Windows.Forms.Application.StartupPath);
oWordDoc.SaveAs(ref oSavePath, 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);


Object oFalse = false;


oWordDoc.Close(ref oFalse, ref oMissing, ref oMissing);


oWordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
byte[] FileBuffer = System.IO.File.ReadAllBytes(oSavePath.ToString());
System.IO.File.Delete(oSavePath.ToString());
دکمه نمایش فایل ذخیره شده:
Class1.con.Open(); Class1.str1 = "select top 1 Qts from Quastion where l_code=" + Convert.ToInt32(comboBox3.SelectedValue);
Class1.da = new System.Data.OleDb.OleDbDataAdapter(Class1.str1, Class1.con);
Class1.da.Fill(Class1.dsclass);
Class1.con.Close();
if (Class1.dsclass.Tables[0].Rows.Count > 0)
{
byte[] Bytes = (byte[])Class1.dsclass.Tables[0].Rows[0][0];


string FilePath = string.Format("{0}\\1.docx", Application.StartupPath);
System.IO.File.WriteAllBytes(FilePath, Bytes);
var viewer = System.Diagnostics.Process.Start(FilePath);


// حذف فایلی که ساختیم درست بعد از بستن نرم افزار ورد
viewer.EnableRaisingEvents = true;
viewer.Exited += (o, args) =>
{
System.IO.File.Delete(FilePath);
};
}
موقعی که نمایش فایل رو میزنم این پیغام رو نشون میده چون فایل رو پاک میکنه:

f_naderi
یک شنبه 07 شهریور 1395, 22:36 عصر
اگه فقط آدرس رو ذخیره کنم تعداد فایل ها روی سیستم خیلی زیاد میشه آیا میدونید چطور میتونم فقط محتویات فایل رو ذخیره کنم طوری که محتویات به هم نریزه (چون با دستور content محتویات بهم ریخت)یا کلا خود فایل رو ذخیره کنم نه آدرسشو . بیشمار سپاسگزارم

mr.sirwan
یک شنبه 07 شهریور 1395, 23:42 عصر
خیر دوست عزیز به خاطر حذف کردن فایل نیس، در واقع اون خطی که نوشتیم یه جورایی دستور حذف این فایل رو داخل یه صف قرار میده و میگه بعد از بسته شدن نرم افزار فایل رو حذف کن، لطفا برنامه رو Trace کنین و ضمنا از ساخته شدن فایل در مسیر داده شده اطمینان حاصل کنین

ضمنا احتمالا شما از ورژن پایین DLL مربوط به Microsoft.Office.Interop.Word استفاده میکنین به همین خاطر متد SaveAs2 رو نمیشناسه(البته زیاد تفاوت نمیکنه)، من خودم از ورژن 14.0.0.0 استفاده کردم، شما هم داخل رفرنسهاتون بررسی کنین ببینین چه ورژنی هستش البته بازم میگم احتمالا از اونه

f_naderi
سه شنبه 09 شهریور 1395, 16:24 عصر
نمایش ورد ذخیره شده:
private void button2_Click_1(object sender, EventArgs e) {
Microsoft.Office.Interop.Word.Application oWordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();


Object oMissing = System.Reflection.Missing.Value;
Class1.con.Open();
Class1.str1 = "select Qts from Quastion where l_code=" + Convert.ToInt32(comboBox3.SelectedValue);
Class1.da = new System.Data.OleDb.OleDbDataAdapter(Class1.str1, Class1.con);
Class1.da.Fill(Class1.dsclass);
Class1.con.Close();
if (Class1.dsclass.Tables[0].Rows.Count > 0)
{
byte[] Bytes = (byte[])Class1.dsclass.Tables[0].Rows[0][0];
object FilePath =(object) string.Format("{0}\\TempDoc.Doc", Application.StartupPath);
System.IO.File.WriteAllBytes(FilePath.ToString(), Bytes);
oWordApp = new Microsoft.Office.Interop.Word.Application();
oWordDoc = new Microsoft.Office.Interop.Word.Document();


oWordDoc = oWordApp.Documents.Add(ref FilePath, ref oMissing, ref oMissing, ref oMissing);
oWordApp.Visible = true;
}
}
ورد رو باز میکنه ولی داخلش مینویسه system.byte[]؟؟؟
یک سوال دیگه هم دارم اونم اینکه من می خوام چندین سوال (سوالات استخراجی از بانک) رو داخل یک فایل ورد نمایش بدم .چطور میتونم اینکار رو انجام بدم که محتوای چندین فایل ذخیره شده رو بخونه و داخل یک فایل دیگه قرار بدم؟؟؟

f_naderi
پنج شنبه 11 شهریور 1395, 01:18 صبح
مجددا سلام
خداروشکر مسئله نمایش فایل حل شد البته دیگه باینری ذخیره نمیکنم چون هر کاری کردم فقط مسیر فایل رو بازیابی میکرد ولی نام فایل رو خیر.
حالا میخوام سوالاتی که ذخیره شدند (هر سوال توی یک فایل مجزا) اینها رو توی ورد دیگه ای نمایش بدم یعنی برگه امتحانی(آزمون) درست کنم چطور میتونم این فایل رو درست کنم.

mr.sirwan
پنج شنبه 11 شهریور 1395, 01:25 صبح
مجددا سلام
خداروشکر مسئله نمایش فایل حل شد البته دیگه باینری ذخیره نمیکنم چون هر کاری کردم فقط مسیر فایل رو بازیابی میکرد ولی نام فایل رو خیر.
حالا میخوام سوالاتی که ذخیره شدند (هر سوال توی یک فایل مجزا) اینها رو توی ورد دیگه ای نمایش بدم یعنی برگه امتحانی(آزمون) درست کنم چطور میتونم این فایل رو درست کنم.

نحوه ذخیره سازیتون چطوری هستش؟ آیا مثل قبل خود فایل رو ذخیره میکنین؟ یا فقط متن سوال رو؟

f_naderi
پنج شنبه 11 شهریور 1395, 14:57 عصر
اسم فایل رو به صورت text ذخیره میکنم .
برای نمایش یک فایل ورد کد زیر رو نوشتم تو محیط خود vs کارمیکنه و فایل ورد مربوطه رو نشون میده ولی وقتی فایل setup درست میکنم و اجرا میکنم اررور میده که فایل رو پیدا نمیکنه چرا؟
private void button2_Click_1(object sender, EventArgs e) {
Microsoft.Office.Interop.Word.Application oWordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();

object readOnly = false;
object o = System.Reflection.Missing.Value;


Class1.con.Open();
Class1.str1 = "select QTs_Name from Quastion where l_code=" + Convert.ToInt32(comboBox3.SelectedValue);
Class1.da = new System.Data.OleDb.OleDbDataAdapter(Class1.str1, Class1.con);
Class1.da.Fill(Class1.dsclass);
Class1.con.Close();
if (Class1.dsclass.Tables[0].Rows.Count > 0)
{
string filename = Class1.dsclass.Tables[0].Rows[0][0].ToString();
object FilePath = string.Format("{0}\\"+filename, Application.StartupPath);
oWordDoc = oWordApp.Documents.Open(ref FilePath, ref o, ref readOnly, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);
oWordApp.Visible = true;

}
}
البته این برای نمایش یک فایل ذخیره شده است ، می خوام چندین تا فایل رو داخل یک فایل جدید ادغام کنم.

mr.sirwan
پنج شنبه 11 شهریور 1395, 16:36 عصر
یه کار نخ چندان حرفه ای اینه که تک تک فایل سوالایی که میخواین در آزمونتون باشن رو روی سیستم ذخیره کنین، محتویاتشون روبخونین و در نهایت فایل رو حذف کنین، برای اینکار از یه حلقه For یا foreach استفاده کنین و داخل حلقه به ازای هر سوال فایل مربوطه ش رو رو سیستم ایجاد کنین و متحویاتش رو داخل فایل نهایی آزمون قرار بدین، من کلیات کار رو توسط کد براتون میذارم (توضیحات رو بصورت انگلیسی براتون نوشتم)



Microsoft.Office.Interop.Word.Application oWordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();

Object oMissing = Type.Missing;
Object oFalse = false;
Object oTrue = true;

Object oFinalMergedFile = String.Format("{0}\\FinalMergedFile.docx", System.Windows.Forms.Application.StartupPath);

string Question1 = String.Format("{0}\\Question1.doc", System.Windows.Forms.Application.StartupPath);
string Question2 = String.Format("{0}\\Question2.doc", System.Windows.Forms.Application.StartupPath);

Object oLineBreak = Microsoft.Office.Interop.Word.WdBreakType.wdLineBr eak;

try
{
if (!System.IO.File.Exists(oFinalMergedFile.ToString( )))
{
oWordDoc.SaveAs2(oFinalMergedFile);
}

oWordDoc = oWordApp.Documents.Open(oFinalMergedFile, oFalse, oFalse, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, oTrue,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);

oWordDoc.Activate();

// This is My Sample, You Can Place The Following Lines Into a For Loop
oWordApp.Selection.InsertFile(Question1, ref oMissing, oTrue, ref oMissing, ref oMissing);
oWordApp.Selection.InsertBreak(ref oLineBreak);

oWordApp.Selection.InsertFile(Question2, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
oWordApp.Selection.InsertBreak(ref oLineBreak);

// You Can Use a For Loop or Freach
for (int i = 0; i < length; i++)
{
// Fetch QuestionDoc From Database
// Write It's Bytes On The Machine
// Insert Contents of Current Question to The Final Exam File
// Insert a Break Line (New Line)
// Now, Delete Current Created File
// And Continue
}


oWordApp.ActiveDocument.SaveAs(oFinalMergedFile, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);

oWordApp.ActiveDocument.Close(ref oMissing, ref oMissing, ref oMissing);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

f_naderi
پنج شنبه 11 شهریور 1395, 21:13 عصر
ممنون دوست عزیز .می خوام یه چیزی مثل برگه امتحانی درست کنم یعنی سربرگ داشته باشه و حاشیه و برای هر سوال تشریحی جای جواب بزاره و شماره سوال سمت راست قرار بده و این چیزا چطور میشه اینطوری تنظیم کرد.
در مورد تصویری که قرار دادم میدونید مشکل از چیه که داخل خود vs اجرا میکنه ولی در حالت نصبی خیر.

mr.sirwan
پنج شنبه 11 شهریور 1395, 21:41 عصر
برای ساخت جدول یه نگاه به این لینک بندازین

https://www.google.com/?gws_rd=ssl#q=create+table+in+word+using+C%23

درمورد ارور هم، خیر اطلاعی ندارم، شما هر چی من میگم خلاف اونرو انچام میدین :تشویق: (فایل رو تو دیتابیس ذخیره نمیکنین فقط اسمش رو ذخیره میکنین، با اون روش ساده ای که گفتم :ناراحت:)

f_naderi
جمعه 12 شهریور 1395, 00:49 صبح
برای ساخت جدول یه نگاه به این لینک بندازین

https://www.google.com/?gws_rd=ssl#q=create+table+in+word+using+C%23

درمورد ارور هم، خیر اطلاعی ندارم، شما هر چی من میگم خلاف اونرو انچام میدین :تشویق: (فایل رو تو دیتابیس ذخیره نمیکنین فقط اسمش رو ذخیره میکنین، با اون روش ساده ای که گفتم :ناراحت:)
ممنون. باورکنید هرچی گفتید انجام دادم نمیدونم چشه به اون روش مسیر رو میشناسه ولی اسم فایل رو به صورت هگزادسیمال برمیگردوند وقتی اسم فایل رو هم پیدا نمیکرد اطلاعات غلط وارد ورد نهایی میکرد به همین خاطر فایل ورد نهایی رو باز نمیکرد و پیغام میداد که فایل خراب است.

mr.sirwan
جمعه 12 شهریور 1395, 01:21 صبح
منکه بارها گفتم لازم به ذخیره نام و مسیر فایل نیست، این پارامتر هارو خودتون داخل کدنویسی بهش بدین، شما فقط باید آرایه بایتی فایل رو داخل دیتابیس ذخیره کنین، فقط این پارامتر نیاز هست که ذخیره بشه، آدرس و نام فایل رو فقط موقعی که نیاز به واکشی فایل هست باید مشخص کنین

امیدوارم منظورمو رسونده باشم

f_naderi
جمعه 12 شهریور 1395, 22:10 عصر
یه سوال دیگه:افسرده: من بخوام سوالات رو نمایش بدم که کاربر بتونه از بین اونها برای ساخت آزمون انتخاب کنه چطور امکان پذیره. شبیه این:

mr.sirwan
یک شنبه 14 شهریور 1395, 01:00 صبح
سلام دوست عزیز، روی این مشکل شما خیلی فک کردم غیر از یه روش بد چیزی به ذهنم نرسید، اینکه شما بصورت مخفیانه و بدون اطلاع کاربر از صفحه ورد که حاوی سوال تایپ شده جاری هستش عکس بگیرین و اون عکس رو هم همراه با فایل داخل دیتابیس ذخیره کنین و موقعی که کاربر میخواد یک سری سوال انتخاب کنه، شما فقط اون تصویر رو فراخوانی کنین و بصورت Stream با استفاده از کلاس MemoryStream داخل picturebox نشون بدین

غیر از این، راه دیگه ای به ذهنم نرسید

f_naderi
جمعه 26 شهریور 1395, 11:45 صبح
با عرض سلام مجدد.
دوستان می خوام محتویات هر فایل ورد رو داخل یک ورد دیگه و در سطر های زیر هم نمایش بدم(داخل ستون دوم جدولی که ایجاد میکنم). من وقتی از این دستور استفاده کنم محتویات ورد رو به طور کامل در فایل مقصد درج میکنه System.IO.File.WriteAllBytes(FilePath1.ToString(), bytes);
ولی با این دستور نمیتونم مشخص کنم که مثلا این سوال رو در سطر 2 و ستون 2 درج کن.
اگه از دستور زیر استفاده کنم فرمول ها زیر هم نوشته میشه:
string str=oWordDoc.Content.Text;
چکار کنم؟

mr.sirwan
جمعه 26 شهریور 1395, 21:36 عصر
با عرض سلام مجدد.
دوستان می خوام محتویات هر فایل ورد رو داخل یک ورد دیگه و در سطر های زیر هم نمایش بدم(داخل ستون دوم جدولی که ایجاد میکنم). من وقتی از این دستور استفاده کنم محتویات ورد رو به طور کامل در فایل مقصد درج میکنه System.IO.File.WriteAllBytes(FilePath1.ToString(), bytes);
ولی با این دستور نمیتونم مشخص کنم که مثلا این سوال رو در سطر 2 و ستون 2 درج کن.
اگه از دستور زیر استفاده کنم فرمول ها زیر هم نوشته میشه:
string str=oWordDoc.Content.Text;
چکار کنم؟

دوست عزیز کدهایی که توو این پست (http://barnamenevis.org/showthread.php?528884-%D8%A8%D8%A7%D8%B2-%D8%B4%D8%AF%D9%86-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B1%D8%A7%D8%B1-word-%D8%AF%D8%A7%D8%AE%D9%84-%D9%81%D8%B1%D9%85&p=2338874&viewfull=1#post2338874) گذاشتم رو اصلا نگاه کردین؟؟؟؟؟ دقیقا چیزیه که شما میخواین :| :|

f_naderi
شنبه 27 شهریور 1395, 18:16 عصر
ممنون دوست عزیز بله درست فرمودید اونموقع چون کدش رو متوجه نشدم استفاده نکردم دیگه فراموشم شد. با توجه به لینکی که برای ساخت جدول قرار دادید و سرچی که کردم نتونستم متوجه بشم چطور باید داخل ستون دوم قرار بدم و ستون اول رو شماره سوال.
Class1.dsclass.Clear(); Class1.dsclass.Tables.Clear();
string Question;
Object oFinalMergedFile = String.Format("{0}\\temp.docx", System.Windows.Forms.Application.StartupPath);
Object oLineBreak = Microsoft.Office.Interop.Word.WdBreakType.wdLineBr eak;
oWordDoc = oWordApp.Documents.Open(ref oFinalMergedFile, ref oMissing, ref readOnly, 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);

oWordDoc.Activate();
for (int i = 0; i < listView1.Items.Count;i++ )
{
if(listView1.Items[i].Checked){
Class1.str1 = "select QTs_Name from Quastion where Quastion.Num_Question=" + Convert.ToInt32(listView1.Items[i].SubItems[1].Text.Trim());
Class1.da = new System.Data.OleDb.OleDbDataAdapter(Class1.str1, Class1.con);
Class1.da.Fill(Class1.dsclass);
Question = String.Format("{0}\\"+Class1.dsclass.Tables[0].Rows[0][0].ToString(), System.Windows.Forms.Application.StartupPath);
oWordApp.Selection.InsertFile(Question, ref oMissing,ref oTrue, ref oMissing, ref oMissing);
oWordApp.Selection.InsertBreak(ref oLineBreak);
Class1.dsclass.Clear();
Class1.dsclass.Tables.Clear();
}


}
label1.Text=listView1.Items.Count.ToString();
oWordApp.Visible = true;
با این کد جدول درست میشه ولی نمیدونم چطور سوال رو به تکست نسبت بدم چون خروجی insertfile به صورت void هستش .
Microsoft.Office.Interop.Word.Table t = oWordDoc.Tables[1]; t.Rows.Add(ref oMissing);
t.Rows[2].Cells[2].Range.Text = "";
t.Rows[2].Cells[3].Range.Text = "1";
سوال دیگه ای هم که دارم اینه که من وقتی سوالات رو به عکس تبدیل میکنم و نمایش میدم در لیست ویو عکس به صورت آینه ای نمایش داده میشه چرا؟
و سوال دیگه اینکه چطور میتونم متوجه بشم که فایل ورد بسته شده چون من برای دکمه خروج نوشتم که فایل ورد باز رو ببنده ولی اگر کاربر اون فایل رو بسته باشه برنامه اررور میده . و دیگه اینکه وقتی نرم افزار ورد باز میشه ورد پشت فرم ها قرار میگیره ولی من می خوام هم اینکه تمام صفحه باز نشه و هم اینکه جلوی فرم قرارل بگیره...
بینهایت سپاس

f_naderi
یک شنبه 28 شهریور 1395, 00:19 صبح
دوست عزیز مشکل اول با این دستورات حل شد.
oWordDoc.Tables[2].Rows.Add(ref oMissing); oWordDoc.Tables[2].Rows[j].Cells[1].Range.Text = j.ToString();
oWordDoc.Tables[2].Rows[j].Cells[2].Range.InsertFile(Question, ref oMissing, ref oTrue, ref oMissing, ref oMissing);
ولی بقیه سوالاتم هنوز پابرجاست ممنون .

mrsp1988
پنج شنبه 24 خرداد 1397, 15:03 عصر
دوست عزیز، متاسفانه این کنترلی که گذاشتین واسه من ارور میده، چندین بار امتحان کردم خواستم روال کارشو بفهمم و بیام واستون توضیح بدم ولی از شانس شما واسه من تو محیط دیزاین اجرا ارور میده

142149

از دوستان خواهش میشه کنترل موردنظر رو دریافت کنن و کار دوستمون رو راه بندازن


سلام دوستان من به این DLL نیاز دارم ولی برای من هم این خطا رو میده چیکار باید بکنم