#เล่าสู่กันฟัง 63-040 แฟ้มข้อมูลเอ็กเอ็มแอลเป็นมาตรฐานมานานแล้ว

มีโอกาสเห็นข้อมูลที่ภาครัฐเผยแพร่
ทำให้นึกถึงเรื่องราว และโค้ดที่ใช้อ่าน
แฟ้มข้อมูลแบบเอ็กเอ็มแอล (xml)

พบว่า code ใช้ php5 เมื่ออัพเกรดเครื่องเป็น php7
พบ code ใช้ไม่ได้เยอะ
จึงกลับไปทบทวนเว็บเพจที่เล่าเรื่อง xml
พร้อมกับปรับแก้ code ให้กลับมาทำงานได้อีก

ประเด็นหนึ่ง คือ ie ที่เคยใช้งาน js
เปิด xml ได้ เมื่อมีการลด secure เป็น low แต่ ie รุ่นใหม่
กำหนดให้ปรับ secure ต่ำสุด คือ medium
บางคำสั่งเคยใช้ได้ในอดีต
แต่ปัจจุบันใช้ไม่ได้แล้ว

http://www.thaiall.com/xml
http://www.data.go.th

กำหนดรูปแบบให้ตัวเลขแบบ leading Zero

มีเพื่อนต้องการแฟ้ม .csv ที่มี leading zero
คือ นำหน้าด้วยเลข 0 หากจำนวนหลักไม่ครบตามต้องการ
เพราะเป็นเงื่อนไขของหน่วยเหนือ เค้าขอมาอย่างไรก็ต้องจัดให้
กำหนดมาให้มีข้อมูล 3 หลัก เช่น 007 ส่งแต่ 7 ไปเค้าก็ไม่ปลื้ม
แต่ข้อมูลในระบบเก็บเป็นเลข 7
เดิมนั้นคุณปอ นำข้อมูลออกจากระบบ (export)
แล้วเขียนในรูปแบบ .htm แต่เปลี่ยนสกุลเป็น .xls อัตโนมัติ เพื่อใช้ใน excel
จากนั้นคุณนอ ก็เปิดใน excel เพื่อประมวลผลอีกซะป๊ะ
แล้วจึง save as เป็น .csv เพื่อนำเข้าระบบ (import) ให้หน่วยเหนือ

number format สำหรับ excel
number format สำหรับ excel

สรุปขั้นตอน
1. ข้อมูลเลข 7 ในระบบ ปรับเป็น 007 แล้วส่งเป็น .htm จะพบ 007 ผ่าน table
ไม่พบปัญหา เมื่อแสดงผล 007 ใน browser
2. นำแฟ้ม .htm แปลงเป็น .xls ด้วยการเปลี่ยนนามสกุล เพื่อนำไปเปิดใน excel
ไม่พบปัญหา เพราะแฟ้มทั่วไปเปลี่ยนนามสกุลได้
3. เปิดแฟ้ม .xls ที่มีเลข 007 พบว่า excel ปรับการแสดงผลเป็น 7 ทันที
พบปัญหา ว่าเลข 007 เมื่อแสดงใน excel จะพบเพียงเลข 7
4. เดิมแก้ด้วยการปรับแบบ manual ใน excel
พร้อมไปกับการประมวลผลอื่น แล้วส่งออกเป็น .csv ก็รู้สึกว่าเป็นการทำงานหลายรอบ
คุณนอ บอกคุณปอ ว่าไม่สะดวก ช่วยปรับระบบให้หน่อย

สรุปว่า
ในขั้นตอนที่ 1 เขียนข้อมูลออกจากระบบ
โดยปรับเพิ่ม css เข้าไปใน table เพื่อให้การแสดงผลใน excel ถูกต้อง
ด้วยการเติม css ว่า style=”mso-number-format:000;”
เท่านี้ใน excel ก็จะมองเห็น 000 ตามต้องการแล้ว ซึ่งใช้งานได้กับ excel
เมื่อส่งออกไปเป็น .csv ก็พบว่ารูปแบบ 000 ติดไปด้วย และส่งไปให้หน่วยเหนือได้

ตัวอย่าง source code ใน .xls
<body>
<table>
<tr><td style=”mso-number-format:000;”>0</td></tr>
<tr><td style=”mso-number-format:000;”>000</td></tr>
</table>
</body>

 

ปล. ข้อมูลเรื่องนี้ได้จากการย้อนรอยกลับขึ้นไปจากตัว excel เองครับ

download รายการอีเมลใน google apps ขององค์กร

download email in google apps for education
download email in google apps for education

มีโอกาสใช้บริการ google apps โดยผูกโดเมนของ thaiabc.com เข้าไป แล้วต้องการรายการของสมาชิกออกมาในรูปของ CSV ก็ต้องเข้าในฐานะ admin แล้วคลิ๊ก setting, Email, Email address ที่มุมล่างสุดสามารถคลิ๊ก Download user list as CSV เหตุที่ต้องการข้อมูล ก็เพราะต้องนำข้อมูลสมาชิกจากระบบอีเมล ไป import ในระบบ e-learning ของ moodle ช่วยให้สมาชิกสามารถเข้าใช้งานระบบได้ทันที แต่ถ้าไม่มีรหัสผ่านออกมาจาก google apps ก็สร้างรหัสผ่านใหม่ แจกนักเรียนในห้อง แล้วให้นักเรียนเข้าไปเปลี่ยนรหัสผ่านในระบบด้วยตนเอง

รายการที่ google apps ส่งออกมาประกอบด้วย
1. EmailAddress
2. FirstName
3. LastName
4. LastLogin
5. FirstLogin
6. Quota

อัพโหลดผู้ใช้เข้า moodle 2.2.1

moodle user upload
moodle user upload

การอัพโหลด รายชื่อผู้ใช้เข้าระบบอีเลินนิ่งของ moodle มีเงื่อนไข ดังนี้ 1) บรรทัดละ 1 คน 2) ทุกบรรทัดมีหนึ่งระเบียน แต่ละระเบียน แบ่งแยกด้วย , หรือเครื่องหมายแล่งแยกอื่น 3) ระเบียนแรกให้เป็นชื่อเขตข้อมูล 4) ชื่อเขตข้อมูล คือ username, password, firstname, lastname, email

ผมมีข้อมูลเป็นอีเมล และต้องการใช้ email เป็นรหัสสำหรับ login เช่น xxx@yyy.com แล้วต้องการเฉพาะ xxx จึงใช้ฟังก์ชันด้านล่างนี้

=LOWER(MID(E2,1,FIND(“@”,E2)-1))

ในโปรแกรม excel เพื่อให้ได้แฟ้ม csv

ผลทดสอบส่ง  597 คน เข้าระบบ เรียบร้อยดีครับ

ตัวอย่าง sql ใน microsoft access

query
query

เป็น sql ที่ได้จาก query ที่เชื่อมโยง 3 ตาราง คือ sumscoreok53, limitlcn และ course มีการใช้ static text, right join และ left function เพื่อคัดลอกข้อมูล แล้วนำไปใช้ในอีกระบบที่ต้องใช้ผลการประเมินการเรียนการสอน ประกอบการจัดทำรายงานการปฏิบัติงาน ซึ่งใช้แฟ้มประเภท csv หากผมต้องหาวิธีสร้างแฟ้ม eval25541 อีก ก็จะกลับมาค้นใน blog ว่าใช้ sql แบบใด

SELECT 2554 AS Expr1, 1 AS Expr2, sumscoreok53.codes, COURSE.SUBJT, limitlcn.SECLC, COURSE.CREDTT, sumscoreok53.cid, sumscoreok53.cnt, Left([avg],5) AS avg5 FROM (limitlcn RIGHT JOIN sumscoreok53 ON (limitlcn.SECLC = sumscoreok53.s) AND (limitlcn.CODES = sumscoreok53.codes)) LEFT JOIN COURSE ON sumscoreok53.codes = COURSE.CODES;