Developer Stories Software Developer Indonesia, Ini Cara Pakai Open XML di .NET Core

Software Developer Indonesia, Ini Cara Pakai Open XML di .NET Core

Bagi software developer Indonesia, saat ini, banyak aplikasi yang menerapkan office tools untuk membantu pengerjaan dokumen, presentasi, maupun spreadsheet. Office tools ini dapat dipakai menggunakan SDK (Software Development Kit).

Secara umum, SDK itu mengacu pada modul perangkat lunak lengkap yang mencakup semua yang dibutuhkan untuk modul tertentu dalam suatu aplikasi. Dalam hal ini, SDK yang dipakai adalah Open XML for Office. 

Apa Pengertian Open XML

Open XML sendiri adalah standar untuk word-processing pada dokumen, presentasi, dan spreadsheet yang dapat diimplementasikan secara bebas oleh banyak aplikasi pada platform yang berbeda. Open XML dirancang untuk merepresentasikan word-processing dokumen, presentasi, dan spreadsheet yang dikodekan dalam binary formats yang ditentukan oleh aplikasi Microsoft Office. Alasan yang mendasari adanya Open XML sangatlah sederhana, yakni ada miliaran dokumen saat ini, tapi sayangnya, informasi dalam dokumen tersebut sangat erat hubungannya dengan program yang membuatnya. Nah, tujuan dari standar Open XML ini adalah untuk memisahkan dokumen yang dibuat oleh aplikasi Microsoft Office sehingga dapat dimanipulasi oleh aplikasi lain yang tidak bergantung pada format kepemilikan dan tanpa kehilangan data.

Seperti judulnya, di sini kita akan membahas untuk software developer Indonesia bagaimana cara membuat, memanipulasi, dan mengedit word document dengan Open XML SDK pada aplikasi berbasis .NET Core. OK, first thing first. You have to know what is .NET Core and how to use it? 

Arti .NET Core

.NET Core adalah salah satu produk atau usaha dari Microsoft yang bertujuan untuk merangkul lebih banyak developer dengan mengembangkan teknologi .NET yang open source dan multi platform OS. Artinya, .NET Core tidak hanya berjalan pada Windows OS tetapi dapat berjalan juga di sistem operasi Linux maupun MacOS. Proyek ini dikembangkan oleh karyawan Microsoft melalui .NET Foundation dan dirilis di bawah Lisensi MIT.

Beberapa teknologi inti dari .NET Framework yang tetap ada di .NET Core, yaitu ASP.NET untuk aplikasi web, Entity Framework Core untuk ORM database serta segala fitur untuk mengembangkan aplikasi console ataupun cloud service. Oh ya, untuk saat ini, belum ada library untuk pengembangan GUI.

Yang akan kita software developer Indonesia pakai dalam pembuatan aplikasi kali ini adalah ASP.NET MVC untuk aplikasi berbasis web.

Build Program di .NET Core dan Pakai Open XML untuk Software Developer Indonesia

And, let’s build the program!

1. OK, pertama yang pasti software developer Indonesia perlu media untuk membuat project baru. Di tutorial ini, kita memakai IDE Visual Studio.

software developer indonesia project visual studio code microsoft

2. Selanjutnya, software developer Indonesia pilih template untuk project baru, yaitu ASP .NET Core Web Application.

software developer indonesia asp .net core project visual studio code microsoft

3. Lalu, saya memberi nama project-nya “OpenXmlWord”. Untuk location project nya sendiri bebas ya, kalian bisa menyimpannya di folder manapun.

software developer indonesia web application asp .net core project visual studio code microsoft

4. Pada jendela baru, pilih Web Application MVC (Model-View-Controller). Lalu, klik Create untuk membuat project-nya.

software developer indonesia asp.net core project visual studio code microsoft

5. Setelah project dibuat, hal pertama yang harus dilakukan adalah meng-install package Open XML-nya. Kita membutuhkan Nuget Package Manager untuk memasang package Open XML di project yang kita buat.

software developer indonesia .netcore package manager project visual studio code microsoft

6. Di Nuget Package Manager, kita klik browse lalu ketikkan ‘openxml’ pada textbox search, lalu klik pada package DocumentFormat.OpenXml dan klik install.

software developer indonesia openxml project visual studio code microsoft

Membuat Fungsi Generate Word File dengan Open XML di .NET Core bagi Software Developer Indonesia

1. Setelah package Open XML ter-install, lanjut ke penambahan fungsi pada HomeController untuk meng-generate word file.

software developer indonesia controller project visual studio code microsoft

Untuk membuat fungsi generate word file, tambahkan source code berikut pada class HomeController dan tambahkan assembly yang diperlukan seperti di bawah ini.

2. Untuk menyimpan path word file yang akan dibuat software developer Indonesia, buat variabel string untuk menampungnya.

3. Buatlah fungsi OpenAndAddTextToWordDocument seperti berikut untuk membuat word document. Dari source code di bawah, terlihat bahwa kita software developer Indonesia akan mengakses bagian utama dokumen, yaitu body, dimana akan ditambahkan teks di dalamnya. Ini lewat penambahan instance class Paragraph, Run, dan Text yang menghasilkan markup WordprocessingML yang diperlukan.

4. Setelah fungsi OpenAndAddTextToWordDocument selesai, buatlah fungsi untuk memanggil fungsi tersebut agar dapat dipakai pada view dengan trigger button onclick.

Lalu, jangan lupa untuk menambahkan kode seperti berikut pada file Index.cshtml. Gunanya untuk mengakses fungsi OpenAndAddTextToWordDocument.

5. Sekarang teman-teman bisa langsung eksekusi projectnya (bisa dengan tekan F5). Secara otomatis akan muncul halaman browser seperti berikut yang menunjukkan button untuk generate word document.

software developer indonesia word project visual studio code microsoft

Nah, setelah mengklik button Generate Word, word document akan muncul pada path yang sudah di-set sebelumnya.

Voila! Beginilah hasilnya! Bagaimana? Cukup mudah, bukan?

Membuat Fungsi Edit Word File dengan Open XML di .NET Core bagi Software Developer Indonesia

Eits, belum selesai ya. Kita lanjut dengan fungsi untuk me-replace text di word document yang tadi kita buat. 

1. Sama seperti sebelumnya, kita tinggal menulis fungsi SearchAndReplace seperti pada source code berikut. Dalam fungsi tersebut terdapat StreamReader yang gunanya membaca seluruh isi yang ada pada word document. Ada juga Regex Class yang mewakili mesin ekspresi reguler yang dapat digunakan untuk mengurai teks dalam jumlah besar dengan cepat untuk menemukan pola tertentu yang ada pada word document. Regex Class mempunyai beberapa function yang dapat dipakai. Contohnya, yang aku pakai, yaitu function Replace dan StreamWrite yang berfungsi mengganti dan menulis text yang ada pada document.

2. Kemudian, buat fungsi yang akan memanggil fungsi di atas agar dapat dipakai oleh view by onclick pada button.

3. Tidak lupa, tambahkan source code berikut pada file Index.cshtml.

4. Setelah semua fungsi sudah beres, maka tinggal execute project-nya.

Dan tara! Jadilah text Hello World terganti oleh Hi Everyone.

Source Code Controller dan View untuk Open XML di .NET Core bagi Software Developer Indonesia

Untuk kebaikan bersama, di bawah ini adalah full source code dari Controller dan View yang tadi kita buat.

HomeController.cs

using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using OpenXmlWord.Models;

namespace OpenXmlWord.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        string strDoc = @"C:\Users\Public\Documents\Letter.docx";

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }

        public ActionResult GenerateWord()
        {
            OpenAndAddTextToWordDocument(strDoc, "Hello world!");

            return RedirectToAction("Index");
        }

        public static void OpenAndAddTextToWordDocument(string filepath, string txt)
        {
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
            {
                MainDocumentPart mainDocumentPart = wordDoc.AddMainDocumentPart();
                mainDocumentPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();

                Body body = mainDocumentPart.Document.AppendChild(new Body());
                Paragraph paragraph = body.AppendChild(new Paragraph());
                Run run = paragraph.AppendChild(new Run());
                run.AppendChild(new Text(txt));
            }
        }

        public ActionResult EditWord()
        {
            SearchAndReplace(strDoc);

            return RedirectToAction("Index");
        }

        public static void SearchAndReplace(string document)
        {
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
            {
                string docText = null;
                using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
                {
                    docText = sr.ReadToEnd();
                }

                Regex regexText = new Regex("Hello world!");
                docText = regexText.Replace(docText, "Hi Everyone!");

                using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
                {
                    sw.Write(docText);
                }
            }
        }
    }
}

Index.cshtml


@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <div class="row">
        <div class="col-md-12" style="margin-bottom: 200px">
            <h1 class="display-3">Welcome</h1>
        </div>
        <div class="col-md-6">
            <div>
                <h1>Generate Word File</h1>
            </div>
            <div>
                <input type="button" class="btn btn-primary" value="Generate Word" onclick="location.href='@Url.Action("GenerateWord", "Home")'" />
            </div>
        </div>
        <div class="col-md-6">
            <div>
                <h1>Edit Word File</h1>
            </div>
            <div>
                <input type="button" class="btn btn-warning" value="Edit Word" onclick="location.href='@Url.Action("EditWord", "Home")'" />
            </div>
        </div>
    </div>
</div>

So, bagaimana? Seru? Seru-seruin aja ya biar nggak stress hehehehe. Btw, project yang kita buat tadi masih bisa kita kembangkan lebih jauh. Software developer Indonesia bisa set text yang akan ditulis pada word document dengan inputan dari form juga lho. Caranya, cukup tambahkan model pada project-nya.

Untuk contoh project yang menggunakan form, bisa kalian lihat di repositori GitHub-ku di sini.

Happy coding! Semoga bermanfaat ya! :D


GITS.ID telah membantu beragam kebutuhan klien, dalam bentuk aplikasi mobile maupun website. Salah satunya adalah JRku bersama Jasa Raharja. Tentang aplikasi ini dapat diakses di halaman Insight ini.


Tresna Nurziyan adalah salah satu back-end developer di GITS.ID.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

More articles

Latest article

Software Developer Indonesia, Ini Cara Pakai Open XML di .NET Core

Bagi software developer Indonesia, saat ini, banyak aplikasi yang menerapkan office tools untuk membantu pengerjaan dokumen, presentasi, maupun spreadsheet. Office tools ini...

Cara Membuat UI/UX Design Portfolio yang Menarik Perhatian Recruiter

Bidang UI/UX design terus berkembangan pesat dan memiliki banyak peluang. Dengan memiliki design portfolio yang kuat dan menarik, kamu punya banyak kesempatan...

GITS Expert Talks: How to Do Commercial Budgeting during Uncertainty Period

Preparing the 2021 budget will be challenging for most companies given the unprecedented situation now. We have faced 2020 with great conservatism...

Implementasi REST API di iOS Development menggunakan Alamofire dan SwiftyJSON

iOS Development – Tentang REST API Bagi seorang developer, mungkin sudah tidak asing lagi...

GITS Expert Talks: Guide to Building a Learning Organization

In 1995, Peter Senge coined the term of a Learning Organization. He defines it as a company that facilitates learning of its...