PDA

View Full Version : گفتگو: جستجو و تغییرات در داخل فایل Word به کمک #C



NaserHadi
چهارشنبه 04 مرداد 1391, 10:55 صبح
با سلام
در برنامه های DocumentManager ویا کلا هر برنامه ای که با فایل ها کار بکنه مسئله باز کردن فایل , تغییرات لازم , جستجوی متن و دهها کار دیگر از این قبیل مطرح میشه
من قصد دارم در این تاپیک عملیات لازم در مورد کار با فایلهای Word رو مطرح کنم تا به کمک دوستان در مورد تمام اعمال مذکور به بحث پرداخته و این تاپیک به منبعی در مورد کار با فایلهای Word در برنامه های C#‎.net تبدیل بشه

NaserHadi
چهارشنبه 04 مرداد 1391, 11:22 صبح
متدی برای تغییر Detail فایل Word


private void ChangeDetails(string strFileFullName)
{
OleDocumentPropertiesClass obj = new OleDocumentPropertiesClass();
obj.Open(strFileFullName);
obj.SummaryProperties.Author = "CompanyName Inc";
obj.SummaryProperties.Comments = "© Copyright CompanyName Inc. 2012.";
obj.SummaryProperties.Company = "CompanyName Inc";
obj.Save();
}
 

NaserHadi
چهارشنبه 04 مرداد 1391, 11:27 صبح
برای استفاده از کلاس OleDocumentPropertiesClass در متد فوق باید یک dll به نام dsofile.dll را به برنامه تون اظافه کنید

متغییر ورودی متد هم مسیر کامل فایل مورد نظر در روی هارد دیسک هست

NaserHadi
چهارشنبه 04 مرداد 1391, 11:39 صبح
Search And Replace
برای جستجوی یک متن در داخل فایل word و سپس جایگزینی ان متن یا کلمه با عبارت مورد نظر می توان اینطور عمل کرد


publicstaticvoid SearchAndReplace(string fileName, string strText, string strReplacementText)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileName, true))
{
string docText = null;
using (StreamReader sr = newStreamReader(wordDoc.MainDocumentPart.GetStream ()))
{
docText = sr.ReadToEnd();
}
Regex regexText = newRegex(strText);
docText = regexText.Replace(docText, strReplacementText);
using (StreamWriter sw = newStreamWriter(wordDoc.MainDocumentPart.GetStream (FileMode.Create)))
{
sw.Write(docText);
}
}
}

لینک منبع:
http://msdn.microsoft.com/en-us/library/bb508261.aspx

NaserHadi
چهارشنبه 04 مرداد 1391, 11:44 صبح
برای استفاده از کد مذکور باید فضای نام زیر به برنامه اضافه بشه

using DocumentFormat.OpenXml.Packaging;


و قبل از ان هم باید یک dll به نام DocumentFormat.OpenXml.dll به برنامه اضافه بشه
من خودم این dll رو از اینترنت پیدا کردم و به برنامه اضافه کردم و ظاهرا هم همه چیز درست بود ولی هنگام اجرا خطا میده که اگه از دوستان کسی باشه که راه حلی برای این مورد داشته باشه ممنون می شم

NaserHadi
چهارشنبه 04 مرداد 1391, 11:57 صبح
هنگام استفاده از متد فوق یک خطای زیر پیش میاد که اگر کسی بتونه کمک کنه ممنون میشم

sirvan-me
چهارشنبه 04 مرداد 1391, 13:03 عصر
دستت درد نکنه دوست عزیز فقط یه مقدار به پست هات نظم بیشتری بیشتری بده و متمرکز تر کار کن ... من که دارم دنبال می کنم ... موفق باشی

NaserHadi
چهارشنبه 04 مرداد 1391, 16:30 عصر
با سپاس از نظر لطف شما دوست خوب sirvan-me عزیز
منظورتون در مورد نظم بیشتر پستها رو اگه واظح تر بگید حتما بروی چشم انجام میدم
و ضمنا نمیخوام اینجا فقط من بنویسم بلکه از دوستان و مخصوصا از شما هم انتظار دارم که نظرات و اطلاعات خود را مطرح کنید تا یک تاپیک قابل استفادهای برای همه بشه

sirvan-me
چهارشنبه 04 مرداد 1391, 16:51 عصر
ممنون . منظورم اینه که از پایه به ترتیب بیاین جلو ... راستش من یه کامپوننت برای کار با فایل های ورد پیدا کردم به زودی میذارم دوستان استفاده کنن .

NaserHadi
یک شنبه 08 مرداد 1391, 12:43 عصر
آیا کسی مفهوم خطای فوق را نمی دونه ؟
چرا هنگام استفاده از کلاس WordprocessingDocument این خطا رخ می ده ؟

NaserHadi
یک شنبه 08 مرداد 1391, 13:26 عصر
البته من خودم برای اینکار از یک الگوریتم دیگه استفاده می کنم و مشکلی نداره و همینجا هم آنرا قرار خواهم داد
ولی می خوام قدم به قدم جلو برم و ابتدا خطای رخ داده در الگوریتم اول را پیدا کرده و بعد به روشهای دیگه بپردازیم
لذا از دوستان تقاضا دارم اگه میدونن چرا متد بالا هنگام اجرا خطا میده لطفا کمک کنند
با تشکر

NaserHadi
سه شنبه 10 مرداد 1391, 09:35 صبح
خب ظاهرا کسی به این مطالب علاقه ای نداره که جواب بده من تا اونجایی که بتونم به تنهایی ادامه می دم

NaserHadi
سه شنبه 10 مرداد 1391, 10:00 صبح
الگوریتم دوم برای Search and Replace :

public static void ReplaceTextInWordFile(object fileName, string strText, string strReplacementText)
{
// Create the Word application and declare a document
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
Document doc = new Document();
// Define an object to pass to the API for missing parameters
object missing = System.Type.Missing;
try
{
// Everything that goes to the interop must be an object
////object fileName =System.Windows.Forms.Application.StartupPath + "\\" + "Text.doc";
// Open the Word document.
// Pass the "missing" object defined above to all optional
// parameters. All parameters must be of type object,
// and passed by reference.
doc = word.Documents.Open(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);
// Activate the document
doc.Activate();
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
// Loop through the StoryRanges (sections of the Word doc)
foreach (Microsoft.Office.Interop.Word.Range tmpRange in doc.StoryRanges)
{
tmpRange.Delete();
// Set the text to find and replace
tmpRange.Find.Text = strText;
tmpRange.Find.Replacement.Text = strReplacementText;
// Set the Find.Wrap property to continue (so it doesn't
// prompt the user or stop when it hits the end of
// the section)
tmpRange.Find.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindCon tinue;
// Declare an object to pass as a parameter that sets
// the Replace parameter to the "wdReplaceAll" enum
object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceA ll;
// Execute the Find and Replace -- notice that the
// 11th parameter is the "replaceAll" enum object
tmpRange.Find.Execute(
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref replaceAll, ref missing, ref missing, ref missing, ref missing);
}
// Save the changes
doc.Save();
// Close the doc and exit the app
doc.Close(ref missing, ref missing, ref missing);
word.Application.Quit(ref missing, ref missing, ref missing);
}
catch (Exception ex)
{
doc.Close(ref missing, ref missing, ref missing);
word.Application.Quit(ref missing, ref missing, ref missing);
}
}


منبع:

http://www.codeproject.com/Articles/36432/Edit-Microsoft-Word-Document-From-Your-Application

NaserHadi
سه شنبه 10 مرداد 1391, 10:04 صبح
الگوریتم دوم از الگوریتم اول کاراتر و بهتره وسریعتر کار میکنه
ولی این هم یه مشکل بزرگ داره و ان اینکه تمام متن موجود در یک فایل ورد رو بررسی و تغییر می ده بجز متن موجود در تکست باکس های داخل یک فایل ورد
که از دوستان عزیز تقاضا دارم در این مورد نظرات خود را بیان کنند

NaserHadi
سه شنبه 17 مرداد 1391, 11:24 صبح
از دوستان و اساتید تقاضا دارم اگر برای مشکل نام برده شده راه حلی دارند دریغ نفرمایند

هنگام جستو و تغییر متنی در داخل یک فایل word با الگوریتم فوق متن موجود در داخل تکست باکسها جستجو نمی شود

sirvan-me
سه شنبه 17 مرداد 1391, 19:09 عصر
باتشکر از شما برای پست های خوبتون ....

کامپوننتی برای کار با فایل های Doc و Docx و ... ( به نقل از Aspose ) :


Aspose.Words v9.1.0.0
Is a class library that enables you to perform a great range of document processing tasks. Aspose.Words supports DOC, OOXML, RTF, HTML, OpenDocument, PDF, XPS, EPUB and other formats. With Aspose.Words you can generate, modify, convert, render and print documents without utilizing Word

می توننین از سایت این شرکت این کامپوننت رو دانلود کنید ....

NaserHadi
چهارشنبه 18 مرداد 1391, 13:25 عصر
از دوستان و اساتید تقاضا دارم اگر برای مشکل نام برده شده راه حلی دارند دریغ نفرمایند

هنگام جستو و تغییر متنی در داخل یک فایل word با الگوریتم فوق متن موجود در داخل تکست باکسها جستجو نمی شود

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