ฉุกคิดมาได้ว่าในเมื่อสามารถไปเรียกใช้อะไรๆต่อมิอะไรจาก excel ได้แล้ว
ก็น่าจะเรียกใช้จาก word ได้เช่นกัน และเจ้า function นี้ผมก็มีความพยายามจะทำมานาน
แต่ก็ยังไม่เข้าใกล้คำว่าใช้งานได้เสียที กระนั้นเลยไปเรียกใช้เอา function นี้
จาก Microsoft word เสียดีกว่าเพราะมันก็ทำงานได้ดี (ยังไม่เป๊ะเท่าไหร่)
อาจจะมีข้อเสีย (ดังคำอธิบายด้านล่าง) แต่หากจำเป็นต้องใช้งาน เราก็ยังพอมีทางเลือกบ้าง
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;
using xWord = Microsoft.Office.Interop.Word;
using System.Reflection;
using System.Runtime.InteropServices;
namespace ThaiInterface
{
class Program
{
static void Main(string[] args)
{
TestWordCount();
}
static void TestWordCount()
{
xWord.Application wordApp = new xWord.Application();
// Word null style to pass through add method
object template = Missing.Value;
object newTemplate = Missing.Value;
object documentType = Missing.Value;
object visible = false;
xWord.Document wordDox = wordApp.Documents.Add(ref template ,ref newTemplate ,ref documentType ,ref visible );
string TestThSentence = "กรุงเทพมหานครอมรรัตนโกสินทร์มหินทรายุธยามหาดิลกภพนพรัตนราชธานีบูรีรมย์อุดมราชนิเวศน์มหาสถานอมรพิมานอวตารสถิตสักกะทัตติยวิษณุกรรมประสิทธิ์";
wordDox.Activate();
wordApp.Selection.WholeStory();
wordApp.Selection.Delete();
wordDox.Words.First.InsertBefore(TestThSentence);
int totalWord = wordDox.Words.Count;
object SaveChage = false;
object originFormat = Missing.Value;
object routeDocument = Missing.Value;
//wordDox.Close(ref SaveChage, ref originFormat, ref routeDocument);
wordApp.Quit(ref SaveChage ,ref originFormat ,ref routeDocument );
System.Console.WriteLine(" Word count = {0}", totalWord.ToString ());
System.Console.ReadLine();
}
}
การเรียกใช้งานในลักษณะนี้จะค่อนข้่างใช้เวลาพอสมควรเพราะมีกระบวนการเกิดขึ้นอย่างซับซ้อน
อีกทั้งยังสิ้นเปลืองทรัพยากรภายในมาก (มีการเรียกใช้งาน Word ขึ้นมาแบบ background เลยทันที 1 process)
หากนำไปประยุกต์ใช้กับ asp.net ควรหาวิธีที่จะเรียกใช้งาน Word Process เดียวกับทุกๆผู้ใช้งาน (1 Process for all session)
หรือใช้ singleton pattern กับส่วนนี้
(และต้อง add reference >> Microsoft.Office.Interop.Word ก่อนด้วย)
เมื่อเราเรียกใช้ word ในลักษณะนี้แล้ว เรายังนำความสามารถในการตรวจสอบคำผิด
แนะนำตัวสะกดที่ถูก หรือกระทั่งเพิ่มเติมคำเฉพาะกิจเข้าไปได้ หรือก็คือเป็นการเรียกใช้ MS WORD
ในแบบ programmatic นั่นเอง อย่างไรก็ดีการจะนำไปใช้งานควรคำนึงถึงเรื่องความถูกต้อง (ลิขสิทธิ์)
สภาพแวดล้อมของเครื่องแม่ข่าย (มีการติดตั้ง MS OFFICE หรือไม่) และข้อเสียดังที่กล่าวมาแว้ว