0

mengedit, menulis, membuka dan menjalankan microsoft office word dari c# (csharp) interop office

Posted by Jujur Sitanggang 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.

 
 

0 Comments

Copyright Jujur Soaloon Sitangang Lipan All rights reserved. Theme by Sitanggang. | Bloggerized by Soalparna.