VSTO atau Visual Studio Tools for Office merupakan framework yang terdapat di dalam .net framework untuk membuat aplikasi berdasarkan produk Microsoft Office seperti Word, Excel, PowerPoint, Visio, dsb. Dengan VSTO tersebut kita dapat melakukan kustomisasi terhadap produk Office tersebut yang dapat disesuaikan dengan kebutuhan bisnis. Pada artikel kali ini saya membuat contoh template surat penawaran dengan mengambil data dari database yang sudah tersedia.
Terdapat dua level kustomisasi di VSTO yaitu Application dan Document level. Saya tidak akan menjelaskan lebih detail tentang VSTO disini. Contoh aplikasi VSTO Word yang akan dibuat yaitu menggunakan document level customization dimana hanya aplikasi tersebut saja yang berpengaruh terhadap kustomisasi yang dilakukan, tidak untuk keseluruhan aplikasi word yang di buat.
Tools yang saya gunakan yaitu Visual Studio 2010 dengan database Northwind sebagai sample data yang dijadikan referensi untuk mengambil data customer dan employee.
Berikut adalah langkah-langkahnya:
1. Buat sebuah VSTO Word 2010 Document based project, berikan nama project tersebut misalnya WordVBTemplate dan TemplateSuratPenawaran.docx untuk nama file word yang akan di kustomisasi.
2. Buat template word seperti berikut ini :

3. Kontrol yang terdapat diantara / disamping teks (yang bertuliskan “Click here to enter text”) merupakan PlainTextContentControl yang ditambahkan dari toolbox kelompok Word controls. Control-control yang terdapat di dalam word document dapat dibuatkan menjadi satu group untuk memudahkan editing control.

4. Berikan nama-nama pada kontrol tersebut sesuai dengan fungsi dari masing-masing text control tersebut misalnya txtNomor untuk nomor surat penawaran.
5. Tambahkan Data Source berupa typed data set. Pilih table Customers dan Employees.
6. Buka designer file .xsd yang terdapat di project dengan double klik file tersebut.
7. Drag dan drop tabel Customer dari jendela Server Explorer. Ubah nama data table tersebut menjadi CustomerDetails begitu juga dengan TableAdapter nya.
8. Tambahkan query baru dengan melakukan klik kanan data table CustomerDetails dan pilih menu Add-Query…
9. Ketikkan query berikut ini dan berikan nama FillByID untuk method tersebut.

10. Berikut adalah hasil akhirnya :

11. Tambahkan User Control ke dalam project, berikan nama ucCustomer.vb. Design user control tersebut dapat dilihat pada gambar dibawah ini :

12. Ketikkan kode berikut ini untuk menghandle event-event yang terdapat di dalam user control tersebut :
Private Sub ucCustomer_Load(sender As Object,
e As System.EventArgs) Handles Me.Load
Dim taCust =
New NorthwindDataSetTableAdapters.CustomersTableAdapter
taCust.Fill(Me.NorthwindDataSet.Customers)
Dim taEmp =
New NorthwindDataSetTableAdapters.EmployeesTableAdapter
taEmp.Fill(Me.NorthwindDataSet.Employees)
End Sub
Private Sub cboCustomer_SelectedIndexChanged(sender As System.Object,
e As System.EventArgs) _
Handles cboCustomer.SelectedIndexChanged
If cboCustomer.SelectedValue IsNot Nothing Then
Dim taCustDetails =
New NorthwindDataSetTableAdapters.CustomersDetailsTableAdapter
taCustDetails.FillByID(
Me.NorthwindDataSet.CustomersDetails,
cboCustomer.SelectedValue.ToString)
End If
End Sub
Private Sub btnSelect_Click(sender As System.Object,
e As System.EventArgs) Handles btnSelect.Click
If Me.NorthwindDataSet.CustomersDetails.Rows.Count > 0 Then
Static intNumber As Integer = 100
intNumber += 1
Globals.ThisDocument.txtNomor.Text = intNumber.ToString
Globals.ThisDocument.txtTanggal.Text = dtpTanggal.Value.ToShortDateString
Globals.ThisDocument.txtKepadaYth.Text = cboCustomer.SelectedValue.ToString
Globals.ThisDocument.txtCompanyCity.Text =
NorthwindDataSet.CustomersDetails.Rows(0).Item("CompanyName").ToString &
", " & NorthwindDataSet.CustomersDetails.Rows(0).Item("City").ToString
Globals.ThisDocument.txtHormatKami.Text = cboEmployee.Text
Else
MessageBox.Show("Select a customer first.")
End If
End Sub
13. Ketikkan kode berikut ini pada document word di project tersebut (ThisDocument.vb) :
Private Sub ThisDocument_Startup() Handles Me.Startup
Me.ActionsPane.Controls.Add(New ucCustomer)
End Sub
Kode tersebut digunakan untuk membuat Action Pane di word pada saat dokumen di load.
14. Berikut adalah screen shot hasil akhir dari project tersebut:
