Export ข้อมูลจาก Access ไป Excel มันไปไม่ครบ ทำอย่างไร...?
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 696   18
URL.หัวข้อ / URL
Export ข้อมูลจาก Access ไป Excel มันไปไม่ครบ ทำอย่างไร...?

คือได้ทำ report ใน access ข้อมูลมีประมาณกว่า 400 record 
และได้ทำการ export to exel  ทำไมบาง field มันจึงไปไม่ครบ 
ทำหลายรอบแล้ว ก็ยังเหมือนเดิม ช่วยตอบให้หน่อยนะคะ 
ขอบคุณค่ะ

18 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00309
คุณ ac ทำโดยการคลิกที่ปุ่ม Export To Excel เวลาที่เปิด Report อยู่ จะมีบางฟีล์ดจะไม่ไปให้ โดยเฉพาะฟีล์ดที่ไม่อยู่ใน Query หรือ Table ที่นำมาเป็น Source ให้ Report ดังกล่าว ให้ลองทำ Export To Word ดูครับ แล้วดูว่าฟีลด์นั้นไปให้หรือไม่ โดยปกติแล้วผมจะไม่ค่อยนิยมวิธีนี้มากนัก ผมมักจะใช้โค้ดในการส่งข้อมูลไปยัง Excel แต่จะต้องยุ่งยากในการเขียนโค้ด ไม่ทราบว่าวัตถุประสงค์ของการแปลง Report ไปเป็น Excel เพื่ออะไรครับ ต้องการให้สามารถมีการแก้ไขปรับปรุงใน Excel อีกหรือไม่ ถ้าไม่ต้องการผมว่าน่าจะใช้วิธีแปลงเป็น PDF ก็จะได้ คนอื่นสามารถนำไปเปิดดูได้ แต่ก็แล้วแต่วัตถุประสงค์ครับ ยังไงลองดูก่อนนะครับ
2 @R00310
ใช่แล้วค่ะท่านอาจารย์สุภาพ ต้องการปรับปรุงใหม่อีกครั้งใน exel ได้ลอง export ไปที ms word แล้วค่ะ ผลคือ OK ไม่มีปัญหา แต่มันจัด paragraph ให้อัตโนมัติ มั่วไปหมด ต้องเสียเวลาไปจัดใหม่นานมาก กว่า 100 หน้าหนะค่ะ สำหรับ Source ที่นำมาใช้ใน report อยู่ใน query ค่ะ ถามอีกนิดนึงว่า แต่ละ cell ใน excel สามารถบรรจุตัวอักษรได้กี่ตัวค่ะ คือสงสัยว่าตัวอักษรที่ import เข้ามาจาก access จะมากเกิน รึเปล่า มันจึงตัดทิ้งไปในส่วนที่เกิน ขอบคุณมากๆ ค่ะ
3 @R00311
ใน Excel สามารถรับตัวอักษรได้จำนวนมากครับ แต่การที่มันไปไม่ครบ ก็เพราะว่าการส่งถ่ายระหว่าง 2 โปรแกรมจะมีปัญหาถ้าโอนด้วยวิธีนี้ ซึ่งมักจะเกิดจากการโอนฟีล์ดที่มีขนาดใหญ่ เช่น ฟีล์ดที่เป็น Memo type มักจะไปแค่ประมาณ 255 ตัวอักษรแรกเท่านั้น ปัญหาตัวนี้หลายท่านเคยปวดหัวกับมันมาแล้ว ที่ผมเคยทำคือการโอนฟีล์ด Memo จาก Query ไปยัง Cell เป้าหมายใน Excel สามารถทำได้โดยไม่มีปัญหาอะไร ข้อความขนาดหลายหมื่นตัวอักษรโอนไปครบหมด ถ้าอยากศึกษาการเขียนโค้ดให้ส่งข้อมูลไป Excel ให้ดูที่กระทู้ http://www.thai-access.com/suphap.php?topic_id=167 ครับ
4 @R00312
ขอบคุณค่ะ ขอตัวไป download code ไปศึกษาก่อนนะคะ แล้วจะมารายงานผลอีกครั้ง ปล.หนังสือไปถึงไหนแล้วคะท่านอาจารย์ อยากเป็นเจ้าของเต็มทีแล้วค่ะ
5 @R00313
อาจารย์ค่ะ ช่วยวินิจฉัยให้อีกทีเถิดค่ะ คือได้ลองนำ code ไปปรับใช้ดูแล้ว ปรากฎว่า ใน excel สำหรับ field ที่เคยมาไม่ครบ คราวนี้มันไม่มาเลยค่ะ แต่มาเป็น "#VALUE!" แทน เท่าที่สังเกตดูจะเป็นเฉพาะ field ที่มีขนาดตัวอักษรเกิน 255 ไม่รู้จะทำอย่างไรแล้ว
6 @R00314
เนื่องจากการโอนด้วยวิธีนี้ จะต้องใช้กำลังของเครื่องคอมฯ มาก เพราะมันต้องไปตรวจสอบดูก่อนว่า ข้อมูลเป็นประเภทไหน เช่น เป็นตัวหนังสือ วันที่ หรือเป็นตัวเลข และยังต้องมาแยกว่าเป็นตัวเลขแบบไหนอีก เช่น เป็น currency, number ธรรมดา หรือ เป็นตัวเลขของวันที่ ซึ่งจะต่างไปจาก Word ที่จะแปลงทุกอย่างไปเป็น Text ให้หมดเลย จึงใช้กำลังของเครื่องฯ ไม่มาก และมักไม่เกิดปัญหาเหมือนทำกับ Excel ลองนำไปใช้กับเครื่องที่มีกำลังสูงๆ ดู อาจได้ผลที่แตกต่างกันออกไป ไม่ทราบว่าใช้ Access เวอร์ชันไหนครับ ลองใช้ตัวใหม่ๆ ดู ปัญหาอาจจะหายไปได้
7 @R00315
ใช้ Access97 ค่ะ แล้วก็ spec ของเครื่อง: - Labtop compaq presario PentiumIII - Ram 128 MB - HD 20 GB ขนาดนี้ไม่ทราบพอหรือเปล่าคะ แต่ไม่เป็นไรคะ ถ้า excel เขาเช็คละเอียดขนาดนี้ จะเลี่ยงไปใช้ ms word แทนก็แล้วกัน งานเสร็จแล้ว ค่อยกลับมาศึกษาใหม่ ยังไงก็ขอบพระคุณท่านอาจารย์สุภาพมากค่ะ ขอบอกว่า webboard ให้ประโยชน์สูงสุดจริงๆ
8 @R00316
ดูจาก spec ก็เกินพอครับ แต่ปัญหาอาจจะอยู่ที่ Access 97 ครับ ลองศึกษาโค้ดดูก็แล้วกัน ถ้าไม่ติดขัดเรื่องความลับของข้อมูล ยังไงก็ส่งมาให้ผมดูทางอีเมล์ก็ได้ครับ ผมจะได้เรียนรู้ด้วย ถ้าข้อมูลใหญ่มาก ก็ให้ Zip ก่อนส่งมาก็แล้วกัน
9 @R00319
ไม่เป็นความลับหรอกค่ะสำหรับข้อมูล เกรงจะรบกวนเวลาท่านอาจารย์มากกว่า ว่าแต่ว่า email address ของอาจารย์สุภาพ คืออะไรคะ ขอโทษจริงๆ หนูหาไม่เจอ ขอบคุณมากกกๆ อีกครั้ง
10 @R00321
ส่งมาที่ kaeg_chaiya@hotmail.com ครับ และกรุณา zip ไฟล์ด้วยนะครับ เพราะ hotmail จำกัดไฟล์ที่มีขนาดใหญ่ครับ
11 @R00322
ลองดูแล้วน่าจะ OK เมื่อโอนออกไปยัง Excel แล้ว ให้คลิกขวาที่ Cell ที่มาจาก Memo แล้วเลือก Format Cells>Alignment tab>Text control ให้คลิกถูกที่ช่อง Wrap Text ลองเปรียบเทียบกับไฟล์ Excel ที่ผมส่งไปให้ครับ ได้ผมเหมือนนี้หรือเปล่า
12 @R00323
ผมพบว่า ถ้าโอนโดยการคัดลอกจากตารางโดยตรงไป Excel จะไปครบทุกตัว แต่ถ้าสร้าง Query หรือ Report ไม่ว่าจะคัดลอกไป หรือเลือกคำสั่ง Export To Excel จะไปได้สูงสุดแค่ 255 ตัวอักษรครับ ผมได้ทดสอบกับ Access XP แล้วก็ยังมีปัญหาเหมือนกัน
13 @R00324
แต่ถ้าโอน Query ด้วย Code ไปยัง Excel จะไปครบถ้วนครับ ให้ลองโค้ดดังนี้ Private Sub cmdExport2Excel_Click() Dim dbs As Database, rst As Recordset Dim I As Integer, J As Integer, X As Integer Dim Workbook As Object, xlApp As Object, Sheet As Object Dim strAppPath As String Set dbs = CurrentDb strAppPath = ap_AppDir + "major.xls" Set rst = dbs.OpenRecordset("query2") If Not rst.EOF Then rst.MoveLast rst.MoveFirst Set xlApp = CreateObject("Excel.Application") Set Sheet = xlApp.workbooks.Open(strAppPath).sheets(1) 'Make Excel visible xlApp.Visible = True 'Run a macro named ClearAll, to clear all data 'xlApp.Application.Run "ClearAll" For J = 1 To rst.Fields.Count - 1 Sheet.cells(1, J).Value = rst.Fields(J - 1).Name Next J X = 1 For J = 1 To rst.RecordCount Sheet.cells(X + J, 1).Value = rst(0) Sheet.cells(X + J, 1).HorizontalAlignment = 2 Sheet.cells(X + J, 1).Borders.LineStyle = 0 Sheet.cells(X + J, 1).Borders.Weight = 2 Sheet.cells(X + J, 2).Value = rst(1) Sheet.cells(X + J, 2).Borders.LineStyle = 0 Sheet.cells(X + J, 2).Borders.Weight = 2 Sheet.cells(X + J, 3).Value = rst(2) Sheet.cells(X + J, 3).Borders.LineStyle = 0 Sheet.cells(X + J, 3).Borders.Weight = 2 Sheet.cells(X + J, 4).Value = rst(3) Sheet.cells(X + J, 4).Borders.LineStyle = 0 Sheet.cells(X + J, 4).Borders.Weight = 2 rst.MoveNext Next J 'Sheet.PrintOut MsgBox "ปิด Excel ได้", vbOKOnly 'Close workbook without saving. xlApp.activeworkbook.Saved = True xlApp.activeworkbook.Close Set Sheet = Nothing xlApp.Quit Set xlApp = Nothing Else MsgBox "ไม่มีข้อมูล", vbOKOnly, "No Records!" End If Set rst = Nothing Set dbs = Nothing End Sub
14 @R00325
อ.สุภาพ ครับ ไม่ทราบว่ามีตัวอย่าง ให้ D/L เพื่อศึกษา หรือเปล่าครับ ผมจะได้เก็บไว้ศึกษาเพิ่มเติม ในเรื่อง โอน Query ด้วย Code ไปยัง Excel ขอบพระคุณมากๆ ครับ Suchat
15 @R00326
โอ้โห...ไม่ยอมหลับนอนเลยนะคะอาจารย์ ทุ่มเทจริงๆ ขอนับถือ คือว่าได้ลองทำทุกวิธีที่อาจารย์แนะนำ แต่....มันยังเป็นเหมือนเดิมเลยค่ะ "#VALUE!" ใน excel ที่มาจาก fileld memo และมีขนาดตัวอักษรมากกว่า 255 ของ access ถูกต้องแล้วค่ะ ถ้าเรา copy ไม่ว่าจะจาก Table หรือ query ไป past ใน cell ของ excel มันไปได้ครบ ไม่มีปัญหา แต่ว่าข้อมูลเยอะเหลือเกิน ก็อบไม่ไหว เคยลองแล้ว มึนค่ะ ผิดช่อง ไปกันใหญ่เลย ปัญหานี้ ไม่ทราบจะเกี่ยวกับ OS และ version ของ Office หรือเปล่าคะ ที่หนูใช้ คือ winMe & Office97 ค่ะ
16 @R00328
ตอบคุณ Suchat มีครับ ตัวอย่างอยู่ที่ http://www.thai-access.com/suphap.php?topic_id=167 ส่วนคุณ ac ให้เอาโค้ดข้างต้นไปใส่แทนโค้ดในฟอร์มที่ส่งมาให้ผมดู แล้วสร้าง Query ที่ต้องการขึ้นมา แล้วลองสั่งให้มันทำงานดูครับ ได้ผลอย่างไร ก็โพสต์เข้ามาได้ครับ
17 @R00331
กระทู้ที่ตอบด้านบน คือผลจากการนำ code ที่อยู่ด้านบนไปใส่แทนของเดิมแล้วค่ะ แล้วก็ได้ทำการ reformat ใน cell ของ excel ที่มาจาก memo ให้เป็น "Format Cells>Alignment tab>Text control ให้คลิกถูกที่ช่อง Wrap Text " แล้วค่ะ แต่ผลยังเหมือนเดิมดังที่ตอบในกระทู้นั่นแหละค่ะ หนูได้ไป download file report1 ที่อาจารย์ทำให้แล้ว ขออนุญาตไปดูผลก่อนนะคะ ขอบคุณมากๆ ค่ะ
18 @R00332
ลองดูจากตัวอย่างที่ผมส่งไปให้นะครับ และสามารถที่จะใช้คำสั่ง Sheet.Range("A2").CopyFromRecordset rst แทนบรรทัดต่อไปนี้ได้เลย ถ้าไม่มีการตรวจสอบอะไรระหว่างโอนถ่ายอีก วิธีนี้จะทำให้การทำงานของโค้ดไวขึ้นมากครับ ... X = 1 For J = 1 To rst.RecordCount Sheet.cells(X + J, 1).Value = rst(0) Sheet.cells(X + J, 1).HorizontalAlignment = 2 Sheet.cells(X + J, 1).Borders.LineStyle = 0 Sheet.cells(X + J, 1).Borders.Weight = 2 Sheet.cells(X + J, 2).Value = rst(1) Sheet.cells(X + J, 2).Borders.LineStyle = 0 Sheet.cells(X + J, 2).Borders.Weight = 2 Sheet.cells(X + J, 3).Value = rst(2) Sheet.cells(X + J, 3).Borders.LineStyle = 0 Sheet.cells(X + J, 3).Borders.Weight = 2 Sheet.cells(X + J, 4).Value = rst(3) Sheet.cells(X + J, 4).Borders.LineStyle = 0 Sheet.cells(X + J, 4).Borders.Weight = 2 rst.MoveNext Next J ลองดูครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0635s