วันศุกร์ที่ 21 กุมภาพันธ์ พ.ศ. 2557

การตัดช่องว่าง ด้วยสูตร Excel

วันนี้เกิดอาการงงนิด ๆ ใช้สูตรรวมเซลล์ ใน Excel แล้วเกิดช่องว่าง ดังภาพ

 

จากภาพ จะเห็นว่า เซลล์ D2 มีการใช้สูตรรวมชื่อ โดยรวม คำนำหน้าชื่อ ชื่อ ช่องว่างและ นามสกุลเข้าด้วยกัน แต่ผลปรากฏว่า มีช่องว่างระหว่างคำนำหน้าชื่อ และชื่อ แต่บางเซลล์ ก็ไม่มีปัญหา เช่น เซลล์ D3 D6 และ D7 เป็นต้น

สาเหตุ

ในการพิมพ์ คำนำหน้าชื่อ เมื่อพิมพ์เสร็จ มีการเคาะ space bar ทำให้เกิดช่องว่างต่อท้ายคำนำหน้าชื่อ ถ้านำเคอร์ไปวางที่ข้างหลัง จะเห็นว่า เคอร์เซอร์ไม่ติดกับท้ายคำ แต่มีช่องว่าอยู่


การแก้ไข

ใช้สูตร trim() ของ Excel ตัดช่องว่างออก และเพื่อให้แน่ใจว่า ไม่มีปัญหา ควรตัดช่องว่างออกให้หมด ทั้งคำนำหน้าชื่อ ชื่อ และนามสกุล ดังคือ
 =trim(A2)&trim(B2)&"  "&trim(C2)


เท่านี้ ปัญหาเรื่องช่องว่างก็จะหมดไป





วันพุธที่ 19 กุมภาพันธ์ พ.ศ. 2557

การแปลง ตัวอักษร เป็นตัวเลข ใน Crosstab Query

ปัญหาอย่างหนึ่งในการการส่งออกข้อมูล จากฐานข้อมูลเป็น ไฟล์ XML ก็คือเรื่อง data type เพราะ XML ไฟล์ ส่งออกข้อมูลออกมาในลักษณะ Text เท่านั้น แม้ข้อมูลในฐานข้อมูลเดิมจะเป็นประเภท Integer หรือ ตัวเลขประเภท อื่น ๆ ก็ตาม  ปัญหาที่ตามมาก็คือ ถ้าจะมีการนำมาคำนวณ หรือจัดการด้านตัวเลข ค่าอาจจะผิดพลาดได้ เช่น การหาค่าสูงสุด หรือต่ำสุด เพราะการเรียนแบบ Text กับการเรียงแบบตัวเลข จะไม่เหมือนกัน

ถ้าเรียงแบบ Text ตัวเลข 2 จะมากกว่า 100
ถ้าเรียงแบบ ตัวเลข ค่าตัวเลข 2 จะน้อยกว่า 100

ข้อมูลข้างล่างนี้ สมมุติว่าเอาเข้ามาจาก XML โดยมี Data Type เป็น Text

การแก้ปัญหาง่าย ๆ คือ เปลี่ยน Data Type ของฟิลด์ จำนวนรวม ให้เป็น Number เสียก่อน แล้วจึงจัดการด้านการคำนวณต่อไป
ถ้านำข้อมูลเดิม มาจัดทำ Crosstab Query เพื่อดูว่า ใคร ซื้อสินค้าอะไร ไปจำนวนสูงสุดเท่าไร
จากข้อมูล จะเห็นว่า

  • สมหมาย ซื้อปากกาจำนวนมากที่สุด คือ  จำนวน 100 แท่ง
  • ประกอบ ซื้อดินสอมากที่สุด คือ 100 แท่ง
ถ้าไม่มีการเปลี่ยน Data type ผลการวิเคราะห์ จาก Crosstab Query จะเป็นดังนี้


จากภาพ จะเห็นว่า เป็นข้อมูลที่ไม่ถูกต้อง เมื่อดูในหน้าต่าง QBE ในมุมมองออกแบบ จะเห็นดังนี้



วิธีการแก้ปัญหา ก็คือ สั่งเปลี่ยน Data Type โดยใช้ฟังก์ชัน CInt() เปลี่ยนเป็น ตัวเลขจำนวนเต็ม เพราะการซื้อสินค้า คงซื้อเป็นจำนวนเต็ม ไม่มีทศนิยมแน่นอน ดังนี้


เพียงเท่านี้ เมื่อสั่งให้ Run ดู ก็จะได้ข้อมูลการเรียงที่ถูกต้อง ดังข้างล่างนี้


 ข้อควรระวังอย่างหนึ่ง ในการแปลงตัวอักษรเป็นตัวเลข ด้วยคำสั่ง CInt()  CDbl() หรืออื่น ๆ ก็คือ ถ้าข้อมูลเดิม ไม่ใช่ตัวเลข แต่เป็นตัวอักษร เช่น เครื่องหมาย - เป็นต้น โปรแกรม Access จะไม่สามารถทำงานได้ และจะแสดงข้อผิดพลาด ดังนี้






วันอังคารที่ 18 กุมภาพันธ์ พ.ศ. 2557

การ Disable ปุ่มบน Custom Ribbon ของ MS Access

การสร้างปุ่มเพื่อใช้เอง ใน MS Access 2010 ต้องสร้างบนริบบิ้น โดยสร้าง XML ในตาราง USysRibbons รายละเอียด คลิกอ่านที่นี่ 

ในบางกรณี เราต้องการทำให้ปุ่มบางปุ่ม อยู่ในสภาวะไม่ทำงาน โดยทำให้เป็นสีจาง ๆ เราสามารถทำได้ โดยการแก้ไข โค้ด XML ในตาราง USysRibbons

เมนูปกติ

เมนูที่มีบางปุ่ม อยู่ในสภาวะ ไม่ทำงาน

ในตัวอย่างข้างบน จะเห็นมีปุ่ม คะแนน ก่อน-หลังเรียน และ ปุ่ม ตรวจชิ้นงาน  อยู่ในสภาวะไม่ทำงาน

วิธีการ

    1. ก่อนอื่นต้องเปิดเมนูของระบบ โดยคลิกขวาที่แถบ วัตถุ Access ทั้งหมด > ตัวเลือกการนำทาง
    2. จะเปิดหน้าต่าง ตัวเลือกการนำทาง ให้คลิก แสดงวัตถุของระบบ
    3. จะเห็นมีตาราง USysRibbons ให้เปิดตารางนี้
    4. ไปดูที่ปุ่มที่ต้องการ และสั่ง ให้ enabled = "false"
    5. ปิด และเปิดไฟล์ Access เพื่อให้ โปรแกรมอ่านค่าในตาราง USysRibbons
    6. เพียงเท่านี้ ก็จะทำให้ปุ่มนี้ ไม่ทำงานเป็นสีเทา ๆ


วันอังคารที่ 11 กุมภาพันธ์ พ.ศ. 2557

ภาษาต่างดาว php UTF-8 TIS-620

สำหรับผู้ที่ทำเว็บ เคยหรือไม่ที่หน้าเว็บออกมาเป็นแบบข้างล่างนี้

ปัญหาก็คือ เรื่องของ Encoding หรือ charset นั่นเอง
มีอยู่ 2 จุด คือ ในส่วนหัวของ HTML กำหนด charset ไม่ตรงกับเครื่องมือที่ใช้เขียน HTML

เช่น ใน EditPlus ตรวจสอบ Encoding ได้ที่ Document > File Encoding > Change File Encoding

จะมีตัวเลือกให้เปลี่ยน เป็น UTF-8 หรือ ถ้ากำหนด charset ในส่วนหัวของ HTML เป็น tis-620 ต้องกำหนดให้เป็น ANSI
ถ้ากำหนดเป็น UTF-8 แต่ส่วนหัวของ HTML กำหนด charset เป็น tis-620 ก็จะเห็นเป็นตัว ภาษาต่างดาว เหมือนในตัวอย่างข้างบน ซึ่งกำหนด charset ในส่วนหัว HTML เป็น UTF-8  แต่ที่ EditPlus กำหนด Encoding เป็น ANSI

เมื่อแก้ไขให้ตรงกัน โดยกำหนด Encoding เป็น tis-620 ปัญหาต่าง ๆ ก็จะหายไป เว็บก็จะอ่านได้ การค้นหาข้อมูลในฐานข้อมูลก็จะทำได้ตามปกติ


ปัญหาไม่ได้อยู่แค่นั้น

สมมติว่า เว็บอ่านออก แต่ถ้ามีการต้องไปค้นหาข้อมูลในฐานข้อมูล และถ้า Encoding ไม่ตรงกัน ระหว่างหน้าเว็บ HTML หรือ PHP กับ Encoding ของ ฐานข้อมูลบน Server เช่น MySQL การค้นหาก็จะล้มเหลว หาไม่พบ

การแก้ไขง่าย ๆ ก็คือ แปลงข้อความที่จะใช้ค้นข้อมูล จาก Encoding ของหน้าเว็บ ให้เป็น Encoding ที่ใช้ในฐานข้อมูล เช่น ถ้าหน้าเว็บเป็น tis-620 แต่ในฐานข้อมูลใช้ utf-8 เราก็แปลง tis-620 ให้เป็น utf-8 เสียโดยใช้ฟังก์ชัน iconv() เช่น

$find = iconv('TIS-620','UTF-8//ignore',$find);

ตัวอย่างนี้ เปลี่ยน Encoding จาก tis-620 เป็น UTF-8 เฉพาะค่าในตัวแปร $find เท่านั้น เพื่อให้สามารถไปค้นหาข้อมูลใน Sever ที่ใช้ฐานข้อมูล MySQL ที่กำหนด Encoding เป็น UTF-8 ได้

มิฉะนั้น จะค้นหาข้อมูลไม่พบ

ถ้าต้องการเปลี่ยนกลับ จาก UTF-8 เป็น tis-620 เพื่อให้แสดงข้อความบนหน้าเว็บได้ ก็ต้องแปลงกลับทำนองเดียวกัน คือ

$found = iconv('UTF-8','TIS-620//ignore',$found);

ในตัวอย่างข้างบน สมมติว่า อ่านข้อมูลในฐานข้อมูลที่มี Encoding เป็น utf-8 และต้องการให้นำมาแสดง บนหน้าเว็บที่กำหนด charset เป็น tis-620 ก็จะสามารถแสดงได้ โดยไม่เป็น ภาษาต่างดาว

อ้างอิง
http://th1.php.net/manual/en/function.iconv.php








วันพฤหัสบดีที่ 6 กุมภาพันธ์ พ.ศ. 2557

การคัดลอกข้อมูลตาราง จาก PDF มายัง Excel 2010

บางครั้งเราต้องการคัดลอกข้อมูลตาราง จากไฟล์ PDF มายัง Excel เพื่อมาจัดการ คำนวณ หรือทำอะไรสักอย่าง ถ้าจะพิมพ์เข้ามาโอกาสผิดพลาดมีมากเหมือนกัน โดยเฉพาะยิ่งมีข้อมูลเยอะ ๆ โอกาสผิดพลาดมีได้ง่าย

ข้อจำกัด
ไฟล์ PDF สามารถกำหนดเงื่อนไขให้ผู้ใช้คัดลอก หรือจะห้ามก็ได้ ถ้าผู้สร้างไม่อนุญาตให้คัดลอก ก็จะไม่สามารถทำได้ ในกรณีที่เจ้าของไฟล์ PDF อนุญาตให้คัดลอกได้ จึงจะสามารถคัดลอกมายัง Excel ได้

หลักการ
คัดลอกข้อมูลตารางจากไฟล์ PDF แล้วมาวางใน Excel โดยใช้ ตัวช่วยสร้างการนำเข้าข้อความ หรือ Text Import Wizard มิฉะนั้นข้อมูลจะไปรวมกันใน Cell เดียวกัน

วิธีการ
  1. เลือกข้อมูลที่ต้องการคัดลอกจาก PDF
  2. คลิกขวา แล้วเลือก Copy เพื่อคัดลอกสิ่งที่เลือก
  3. ไปที่โปรแกรม Excel คลิกเซลล์แรกที่ต้องการวางข้อมูล
  4. ไปที่ลูกศรสามเหลี่ยมใต้ข้อความ วาง จะเปิดเมนูตัวเลือกเพิ่มเติม ให้คลิกที่ ใช้ตัวช่วยสร้างการนำเข้าข้อความ
  5. จะเปิดหน้าจอตัวช่วย เนื่องจาก ข้อมูลจาก PDF จะคั่นด้วยช่องว่าง จึงไม่ต้องปรับอะไร คลิกปุ่ม เสร็จสิ้นได้ทันที
  6. ถ้าโปรแกรมจะถามว่าจะแทนที่ข้อมูลเดิมหรือไม่ น่าจะตอบว่าให้แทนนะครับ ถ้าไม่แทนที่ก็ไม่รู้ว่าจะมาคัดลอกทำไม แต่กรณีที่ระบุผิดที่ ก็มีโอกาสตอนนี้ที่จะยกเลิกและเลือกใหม่ 
  7.  เมื่อคลิก ตกลง ข้อมูลจะถูกแยกและนำมาไว้ใน Cell ของ Excel อย่างถูกต้อง
  8. ถ้าไม่ใช้ตัวช่วยการนำเข้าข้อความ ข้อมูลจะมากองไว้ในเซลล์เดียว ดังภาพข้างล่าง ซึ่งถ้าต้องการแยกข้อมูล ก็จะทำให้ต้องเสียเวลามาแยกข้อมูลอีกนานทีเดียว

  9. หรือแม้แต่ จะเลือกเซลล์หลายเซลล์เพื่อให้วางหลายเซลล์ ก็จะไม่สามารถทำได้ เพราะ การคัดลอกจาก PDF ข้อมูลในตารางจาก PDF จะเป็นข้อความจะเป็นชุดเดียวกัน แต่แยกกันด้วยช่องว่าง จึงต้องใช้ตัวช่วยในการจัดการ 
  10. ถ้าเลือกหลายเซลล์ โปรแกรมจะถาม 

  11. แม้ว่าจะคลิก ตกลง ข้อมูลก็จะมากองที่เดียวกัน เหมือนข้อ 10 เพราะฉะนั้นต้องใช้ตัวช่วยวางข้อความ จึงจะสามารถวางได้ถูกต้อง