กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
860 18
URL.หัวข้อ /
URL
Export ข้อมูลจาก Access ไป Excel มันไปไม่ครบ ทำอย่างไร...?
คือได้ทำ report ใน access ข้อมูลมีประมาณกว่า 400 record
และได้ทำการ export to exel ทำไมบาง field มันจึงไปไม่ครบ
ทำหลายรอบแล้ว ก็ยังเหมือนเดิม ช่วยตอบให้หน่อยนะคะ
ขอบคุณค่ะ
และได้ทำการ 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
ลองดูครับ
Time: 0.1253s