0
mengedit, menulis, membuka dan menjalankan microsoft office word dari c# (csharp) interop office
Posted by jujur
on
9:49 AM
Jika di post
sebelumnya telah dibahas tentang bagaimana cara menjalankan, mengedit
dan melakukan passing data microsoft excel dari csharp sebagai salah
satu alternative membuat sebuah report maupun mencetak dokumen dengan
mudah. Maka kali ini akan dibahas tentang menjalankan, mengedit dan
melakukan passing data dari csharp ke microsoft office word.
Ssebelumnya telah
dikenal kemampuan crystall report dalam membuat sebuah laporan dalam
bahasa pemrograman. Akan tetapi suatu saat kita membutuhkan mencetak
dokumen ke program microsoft office secara simple. Interop microsft
office word adalah salah satu solusinya. Untuk membuat sebuah project
mampu menjalankan microsoft office word maka harus dilakukan interop ms
office dari csharp.
Kali ini dibuat
sebuah project dengan asumsi kita telah memiliki sebuah file dokumen
".doc" ataupun ".docx" yang digunakan untuk master pembuatan laporan
sederhana, ketika program dijalankan program akan membuka file doc
tersebut serta mencari beberapa kode khusus untuk dilakukan proses
replace, sehingga dengan cara demikian akan sangat memudahkan programmer
atau user dalam mendesain sebuah laporan ataupun output dari program
yang dihasilkan, karena desain dokument word tersebut bisa di ms word
secara manual.
Untuk membuat project interop ms office word silahkan ikuti langkah demi langkah berikut ini.Silahkan buka project baru, tambahkan beberapa komponen seperti label, picturebox, groupbox dan juga textbox, atur dan tata sedemikian rupa sehingga tampilan interfacenya seperti pada gambar dibawah ini
Gambar 1 Preview program
Ada 3 function
utama yang akan digunakan dalam program ini, yaitu function
"FindandReplace", "ReleaseObject" dan function pada event single click
pada button1. pada function "Findandreplace" digunakan untuk menelusuri
kode tertentu yang ditambahkan pada file master dokumen, serta melakukan
replace text baru terhadap kode tersebut, function "ReleaseObject"
digunakan untuk membebaskan memory yang gigunakan, sedangkan function
pada event button1 digunakan untuk menjalankan interrop office sekaligus
program utama. Berikut ini adalah privew dari function-function yang
akan digunakan
Jangan lupa, untuk
pertamakali silahkan tambahkan add reference "microsoft.office.word".
Jika proses add reference berhasil, kurang lebih seperti pada gambar
dibawah ini
Gambar 2. Add reference program microsoft office
langkah selanjutnya tambahkan function-function yang dibutuhkan, berikut ini adalah code program dari "function FindandReplace".
public void FindandReplace(Microsoft.Office.Interop.Word.Document oDoc, string Findtext, string ReplaceText)
{
Microsoft.Office.Interop.Word.Range myStoryRange = oDoc.Range();
//First search the main document using the Selection
Microsoft.Office.Interop.Word.Find myFind = myStoryRange.Find;
myFind.Text = Findtext;
myFind.Replacement.Text = ReplaceText;
myFind.Forward = true;
myFind.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
myFind.Format = false;
myFind.MatchCase = false;
myFind.MatchWholeWord = false;
myFind.MatchWildcards = false;
myFind.MatchSoundsLike = false;
myFind.MatchAllWordForms = false;
myFind.Execute(Replace: Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll);
//'Now search all other stories using Ranges
foreach (Microsoft.Office.Interop.Word.Range otherStoryRange in oDoc.StoryRanges)
{
if (otherStoryRange.StoryType != Microsoft.Office.Interop.Word.WdStoryType.wdMainTextStory)
{
Microsoft.Office.Interop.Word.Find myOtherFind = otherStoryRange.Find;
myOtherFind.Text = Findtext;
myOtherFind.Replacement.Text = ReplaceText;
myOtherFind.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
myOtherFind.Execute(Replace: Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll);
}
// 'Now search all next stories of other stories (doc.storyRanges dont seem to cascades in sub story)
Microsoft.Office.Interop.Word.Range nextStoryRange = otherStoryRange.NextStoryRange;
while (nextStoryRange != null)
{
Microsoft.Office.Interop.Word.Find myNextStoryFind = nextStoryRange.Find;
myNextStoryFind.Text = Findtext;
myNextStoryFind.Replacement.Text = ReplaceText;
myNextStoryFind.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
myNextStoryFind.Execute(Replace: Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll);
nextStoryRange = nextStoryRange.NextStoryRange;
}
}
}
langkah selanjutnya double klik pada button1 untuk membangkitkan event single klik pada button1, tambahkan code program berikut ini
Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application(); //membuat object bentukan dari ms office word
object missing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Document aDoc = null;
sPathSource = Directory.GetCurrentDirectory() + "\\exLaporan.docx";
if (File.Exists((string)sPathSource))
{
object readOnly = false;
object isVisible = true;
oWord.Visible = true;
aDoc = oWord.Documents.Open(sPathSource, ref missing,
ref readOnly, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref isVisible, ref missing, ref missing,
ref missing, ref missing);
aDoc.Activate();
FindandReplace(aDoc, "<biaya1>", textBox1.Text);
FindandReplace(aDoc, "<biaya2>", textBox2.Text);
FindandReplace(aDoc, "<biaya3>", textBox3.Text);
FindandReplace(aDoc, "<biaya4>", textBox4.Text);
FindandReplace(aDoc, "<biaya5>", textBox5.Text);
FindandReplace(aDoc, "<biaya6>", textBox6.Text);
FindandReplace(aDoc, "<biaya7>", textBox7.Text);
FindandReplace(aDoc, "<biaya8>", textBox8.Text);
FindandReplace(aDoc, "<biaya9>", textBox9.Text);
FindandReplace(aDoc, "<biaya10>", textBox10.Text);
FindandReplace(aDoc, "<biaya11>", textBox11.Text);
FindandReplace(aDoc, "<biaya12>", textBox12.Text);
double total1 = Convert.ToDouble(textBox1.Text) + Convert.ToDouble(textBox2.Text) + Convert.ToDouble(textBox3.Text) + Convert.ToDouble(textBox4.Text) + Convert.ToDouble(textBox5.Text) + Convert.ToDouble(textBox6.Text);
double total2 = Convert.ToDouble(textBox7.Text) + Convert.ToDouble(textBox8.Text) + Convert.ToDouble(textBox9.Text) + Convert.ToDouble(textBox10.Text) + Convert.ToDouble(textBox11.Text) + Convert.ToDouble(textBox12.Text);
FindandReplace(aDoc, "<total1>", total1.ToString());
FindandReplace(aDoc, "<total2>", total2.ToString());
}
else
{
MessageBox.Show("Dokumen Sumber tidak ditemukan", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
releaseObject(oWord);
releaseObject(aDoc);
}
langkah selanjutnya tambahkan function ReleaseObject, berikut ini adalah code programnya
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
ekarang jalankan program, kurang lebih jika program berhasil berjalan tampilan interface pertama kali seperti pada gambar gambar 1. isi nilai pada pada form yang tampil, setelah itu klik button ok, amati yang terjadi, kurang lebih hasilnya ada program membuka msword dan secara otomatis menulis laporan sederhana sesuai dengan apa yang diinputkan di form sebelumnya
Gambar 3. Ketika program berjalan
Gambar 4. setelah button1 di klik
Dari
gambar diatas dapat diketahui bahwasanya setelah button OK diklik
program secara otomatis memanggil microsoft office word dan melakukan
passing data data yang diinputkan di form sebelumnya secara otomatis,
interop office word ini bisa digunakan alternatif untuk membuat sebuah
laporan atau proses yang membutuhkan print sederhana.