Subscribe RSS Join our Facebook Group Follow us on Twitter!
in Search

Jeffrey Hermanto Halimsetiawan's Blog

December 2010 - Posts

  • Membaca Data dari File Excel Berformat xls dan xlsx dengan Excel Data Reader

    Salah satu varian Microsoft Office yang populer dan banyak digunakan adalah Microsoft Office Excel. File yang umumnya dihasilkan oleh Microsoft Office Excel 2003 adalah sebuah file berekstensi .xls, sedangkan file yang dihasilkan oleh Microsoft Office Excel 2007 adalah sebuah file berekstensi xlsx. Seiring dengan perkembangan Microsoft Office yang telah mencapai versi Microsoft Office 2010, banyak perusahaan ataupun orang yang telah memigrasikan berkas-berkas yang dihasilkan oleh sistem mereka dari binary format (xls) menjadi Office Open XML format (xlsx). Tentunya dalam proses migrasi ini membutuhkan pengujian terhadap validitas dan kesesuain data yang dihasilkan pada file xls dan xlsx tersebut. Kebanyakan library yang beredar hanya memfasilitasi pembacaan Excel File beformat xls saja ataupun xlsx saja, salah satu library yang memudahkan pengguna untuk membaca data pada kedua ekstensi file serta membandingkan data yang tersimpan di kedua file tersebut adalah Excel Data Reader.

    Berikut adalah langkah-langkah sederhana untuk membuat sebuah reader sederhana ini:

    1. Pada Microsoft Visual Studio 2010, buat New Project dengan WPF Application template. image
    2. Pilih Add Reference dan tambahkan library ExcelDataReader, yaitu: Excel.dll dan ICSharpCode.SharpZipLib.dll ke dalam project. image
    3. Tambahkan dua buah control DataGrid yang diberi nama dgFirst dan dgSecond pada MainWindow. image
    4. Definisikan sebuah static method GetDataFromXlsxFile untuk memperoleh DataSet dari suatu file .xlsx.
    5.   1: /// <summary>
        2: /// This method is used to get data from Xlsx file.
        3: /// Author : Jeffrey Hermanto Halimsetiawan
        4: /// </summary>
        5: /// <param name="filepath">filepath of .xlsx file</param>
        6: /// <returns>Data Table which keep .xlsx data</returns>
        7: private static DataSet GetDataFromXlsxFile(string filepath)
        8: {
        9:     string filePathXlsx = filepath;
       10:     FileStream streamXlsx = File.Open(filePathXlsx, FileMode.Open, FileAccess.Read);
       11:     IExcelDataReader excelReaderXlsx = ExcelReaderFactory.CreateOpenXmlReader(streamXlsx);
       12:     DataSet ds = excelReaderXlsx.AsDataSet();
       13:     excelReaderXlsx.Close();
       14:     return ds;
       15: }
    6. Definisikan sebuah static method GetDataFromXlsFile untuk memperoleh DataSet dari suatu file .xls.
    7.   1: /// <summary>
        2: /// This method is used to get data from Xls file
        3: /// Author : Jeffrey Hermanto Halimsetiawan
        4: /// </summary>
        5: /// <param name="filepath">filepath of .xls file</param>
        6: /// <returns>Data Table which keep .xls data</returns>
        7: private static DataSet GetDataFromXlsFile(string filepath)
        8: {
        9:     string filePathXls = filepath;
       10:     FileStream streamXls = File.Open(filePathXls, FileMode.Open, FileAccess.Read);
       11:     IExcelDataReader excelReaderXls = ExcelReaderFactory.CreateBinaryReader(streamXls);
       12:     DataSet ds = excelReaderXls.AsDataSet();
       13:     excelReaderXls.Close();
       14:     return ds;
       15: }
    8. Tentukan DataContext dari kedua control DataGrid yang telah ada untuk mengambil data dari GetDataFromXlsxFile dan GetDataFromXlsFile pada constructor MainWindow.
    9.   1: public MainWindow()
        2: {
        3:     InitializeComponent();
        4:     DataSet ds = GetDataFromXlsxFile("DataTest.xlsx");
        5:     dgFirst.DataContext = ds.Tables[0].DefaultView;
        6:     DataSet dsXls = GetDataFromXlsFile("DataTest.xls");
        7:     dgSecond.DataContext = dsXls.Tables[0].DefaultView;
        8: }

    Sementara itu, siapkan kedua file Excel yang akan dicoba untuk dibaca data yang terdapat di dalamnya dan beri nama “DataTest.xlsx” dan “DataTest.xls”. Berikut adalah sampel data yang terdapat dalam kedua file tersebut: image Hasil uji coba program tersebut seperti yang terlihat pada gambar di bawah ini: image Selamat mencoba dan semoga bermanfaat :D

  • Software Refactoring dengan JetBrains ReSharper 5.1.1 pada Visual Studio

    Software Refactoring adalah suatu teknik untuk melakukan restrukturuisasi pada kode yang ada dan memodifikasi struktur internalnya tanpa mengubah fungsionalitasnya.  Konsep software refactoring memiliki kedekatan metode pengembangan perangkat lunak xtreme programming, yaitu: suatu paradigma pemrograman yang menekankan bahwa pengembangan suatu perangkat lunak akan lebih efektif saat proses pengembangan daripada menghabiskan waktu untuk pembuatan desain.

    Istilah refactoring pertama kali dimunculkan oleh William Opdyke dalam disertasi doktoral miliknya pada tahun 1992 sebagai sebuah teknik restrukturisasi pada pemrogaman berorientasi obyek. Martin Fowler seorang kolega dari Erich Gamma (anggota Gang of Four - pencetus design pattern) memantapkan konsep Opdyke lewat bukunya yang terkenal “Refactoring: Improving the Design of Existing Code”. Dalam buku tersebut, Fowler mendefinisikan refactoring sebagai “the process of changing a software system in such a way that it does not alter the external behaviour of the code, yet improves its internal structure”.

    Salah satu add-on tambahan Microsoft Visual Studio yang dapat digunakan untuk membantu proses Software Refactoring adalah JetBrains ReSharper yang saat ini telah memasuki versi 5.1.1. Add-on ini sebenarnya berbayar, namun kita dapat menggunakan yang versi 30-day free trial. Beberapa kemudahan yang ditawarkan oleh produk ini antara lain:

    • Continuous code quality analysis in C#, XAML, XML, ASP.NET, and ASP.NET MVC.
    • Instant fixes to eliminate errors and code smells.
    • 40 solution-wide refactorings to safely change your code base, and 200+ code editing helpers.
    • Extended web development support with code inspections, code generation, navigation, and extended IntelliSense.
    • Navigation features to let you instantly traverse your whole solution.

    Bagian yang paling memudahkan adalah kemampuannya untuk melakukan code quality analysis secara terus menerus  dan juga membetulkan error ataupun bad smell code secara instan. Code quality analysis yang dilakukan juga tidak hanya pada bagian code behind yang menggunakan bahasa C# tetapi juga meliputi analisa pada bagian XAML dan XML nya. Selain itu, add-on ini juga memberikan kemudahan untuk menentukan ruleset dari Naming Convention yang akan digunakan sehingga jika terjadi nama method/field yang tidak sesuai dengan konvensi yang telah ditetapkan dapat dideteksi dan di-rename dengan cepat. Berikut adalah beberapa contohnya:

    1. Remove unused directives in file : hal ini dilakukan untuk menghapus directives yang tidak dipakai.image
    2. Check parameter for null : hal ini dilakukan untuk melakukan pengecekan sebuah parameter yang berpotensi memiliki nilai null.image Template kode yang akan dihasilkan adalah:
        1: if (canvas == null) throw new ArgumentNullException("canvas");
    3. Invert ‘if’ : hal ini dilakukan untuk mengurangi nesting pada kode sehingga memudahkan pembacaan kode.  image Template kode yang akan dihasilkan adalah:
        1: if (scrollViewer == null) return;
    4. Make return type ‘void’ : hal ini terjadi ketika ada sebuah method dengan return value tertentu yang nilai return value-nya tidak digunakan di dalam program. image
    5. Convert part of body into LINQ-expression : hal baru yang ditawarkan versi ini adalah kemampuannya untuk mengubah assignment dalam sebuah looping for-each menjadi sebuah LINQ-expression. imageKode sebelum:
        1: foreach(CircuitSymbol symbol in this.LogicalCircuit.CircuitSymbol)
        2: {
        3:     Gate gate = symbol.Circuit as Gate;
        4: }
      Kode sesudah:
        1: foreach (Gate gate in this.LogicalCircuit.CircuitSymbol.Select(symbol => symbol.Circuit as Gate))
        2: {
        3: 
        4: }
    6. Rename to : hal ini terjadi ketika terjadi penamaan field atau method yang tidak konsisten dengan ruleset yang telah ditentukan. imageApabila merasa tidak nyaman dengan ruleset yang telah ada, setting terhadap naming rule juga dapat diubah melalui kotak dialog berikut:image 

    Untuk lebih jelasnya, silahkan meng-install versi trial dari JetBrains ReSharper ini yang dapat meningkatkan produktivitas dari developer. Selamat mencoba.