กระทู้เก่าบอร์ด อ.Yeadram
1,653 7
URL.หัวข้อ /
URL
import ชื่อ cell และค่า
ผมมีข้อมูลใน Excel และต้องการ import ค่ามาใส่ access ให้มี 2 field ได้แก่ cell_ name(ตำแหน่ง cell ใน excel) และ cell_value (ค่าใน cell) ทำได้มั้ยครับ และทำอย่างไร เช่น
cell_name cell_value
A1 12
A2 5
B1 1.5
B2 0.12
C1 8
C2 3
cell_name cell_value
A1 12
A2 5
B1 1.5
B2 0.12
C1 8
C2 3
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R19832
ถ้าไม่มีปัญหาเรื่องของ Format ของข้อมูล และได้ออกแบบตารางใน MS-Access ไว้แล้วโดยมี 2 ฟิวด์ที่พูดถึงนี้ เมื่อตอนเรา Import File มา มันจะมีถามด้วยว่าจะ Import มาเป็นตารางใหม่ หรือ Import เข้าในตารางที่มีอยู่แล้วใน MS-Access
2 @R19833
คือว่า ข้อมูลใน excel มันจะมี ชื่อ cell และ ค่าใน cell ดังรูปครับ ผมต้องการ code หรือวิธีการใดๆก็ตาม สำหรับ import ค่าทั้งสองมาเก็บใน access โดยให้ Field cell_name เก็บชื่อของ cell และ Field cell_value เก็บค่าใน cell นั้นๆ ครับ
3 @R19837
ทำได้ครับ โค้ดหลักที่สำคัญอยู่ที่คำตอบแรกใน http://stackoverflow.com/questions/3875415/loop-through-each-cell-in-a-range-of-cells-when-given-a-range-object โค้ดนี้จะเขียนบน Excel เอง หรือจะใน Access เองก็ได้ครับ ถ้าเขียนใน Excel ก็ต้องเรียกเปิดฐานข้อมูล Access ถ้าเขียนใน Access ก็ต้องเรียกอ่านจากไฟล์ Excel ด้วย GetObject( ) ลองหาในกระทู้เก่านะครับ
4 @R19838
รบกวนเขียน code ให้หน่อยครับ
สมมุติรายละเอียดดังนี้
File path: C:\Data.xlsx
Worksheet name: data1
Range: A1:Z100
สมมุติรายละเอียดดังนี้
File path: C:\Data.xlsx
Worksheet name: data1
Range: A1:Z100
5 @R19839
ใครว่างช่วยเขียนแทนหน่อย ช่วงนี้ผมไม่ว่างมาเขียนรายละเอียดนะครับ
6 @R19843
- สามารถทำได้โดยการดึงคำสั่งของ MS Excel มาใช้งานรวมกับคำสั่ง DAO
- สร้างตารางใหม่สมมุติชื่อ Tb_Import ใน MS Access พร้อมฟิลด์ด้วยตัวเอง หรืออาจเขียนฟังก์ชั่นสำหรับสร้างตารางและฟิลด์ ก็ต้องเขียนเพิ่มเอง
- เมื่อได้สร้างตารางพร้อมฟิลด์ที่ต้องการรับค่าแล้ว ก็เขียนคำสั่งเพื่อ Import ข้อมูลจากไฟล์เป้าหมายลงตารางเป้าหมายดังนี้:
'----------------Code Start----------------
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Tb_Import") ' ชื่อตารางเป้าหมาย
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
Dim objBook As Object
Set objBook = objExcel.Workbooks.Open("C:\Data.xlsx") ' พาธและชื่อไฟล์ MS Excel เป้าหมาย
Dim sCount As Integer
sCount = objBook.Worksheets.Count
Dim i As Integer
For i = 1 To sCount
If objBook.Sheets(i).Name = "data1" Then ' ชื่อ Sheet ที่ต้องการข้อมูลบนไฟล์ MS Excel
Exit For
End If
Next
Dim objSheet As Object
Set objSheet = objBook.Worksheets(i)
Dim rRng As Object
Set rRng = objSheet.Range("A1:Z100") ' กำหนดช่วงข้อมูลที่ต้องการของเซลในไฟล์ MS Excel
Dim rCell As Object
For Each rCell In rRng.Cells
rs.AddNew
rs(0) = Replace(rCell.Address, "$", "") ' rCell.Address คือค่าตำแหน่งของเซลบนไฟล์ MS Excel แต่จะติดอักษร $ มาด้วย ดังนั้นจึงต้องตัดทิ้งก่อน
rs(1) = rCell.Value ' rCell.Value คือ ข้อมูลในตำแหน่งเซลนั้นๆ
rs.Update
Next rCell
objExcel.ActiveWorkbook.Close ' ทำการปิดไฟล์ MS Excel เมื่อเสร็จ
objExcel.Quit ' ทำการปิดโปรแกรม MS Excel
Set rRng = Nothing
Set objSheet = Nothing
Set objBook = Nothing
Set objExcel = Nothing
rs.Close: Set rs = Nothing
Set db = Nothing
MsgBox "Import Completed Successfully"
'-----------------Code End-----------------
ปรับใช้ดูนะครับ
ปล. อันนี้นอกเรื่องหน่อย ไม่ได้เกี่ยวกับกระทู้นี้นะครับ คือพักนี้เหมือนมีนักศึกษาเข้ามาถามเพื่อทำงานส่งป่าวก็ไม่รู้ บางทีผมก็เริ่มคิดว่าการเขียนโค๊ดให้แบบนี้เหมือนกับรับทำการบ้านออนไลน์หรือเปล่าก็ไม่รู้ หากเป็นคนที่จะเอาไปใช้งานจริงก็ยินดีไม่เป็นไรนะครับ ถือว่าไม่ได้ศึกษามา แต่หากเป็นนักศึกษา ผมขอให้ใช้สิ่งที่เรียนมาคิดก่อนครับ การเรียนแบบ copy paste ส่งอาจารย์ สุดท้ายแล้วจะไม่ได้อะไรเลย
- สร้างตารางใหม่สมมุติชื่อ Tb_Import ใน MS Access พร้อมฟิลด์ด้วยตัวเอง หรืออาจเขียนฟังก์ชั่นสำหรับสร้างตารางและฟิลด์ ก็ต้องเขียนเพิ่มเอง
- เมื่อได้สร้างตารางพร้อมฟิลด์ที่ต้องการรับค่าแล้ว ก็เขียนคำสั่งเพื่อ Import ข้อมูลจากไฟล์เป้าหมายลงตารางเป้าหมายดังนี้:
'----------------Code Start----------------
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Tb_Import") ' ชื่อตารางเป้าหมาย
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
Dim objBook As Object
Set objBook = objExcel.Workbooks.Open("C:\Data.xlsx") ' พาธและชื่อไฟล์ MS Excel เป้าหมาย
Dim sCount As Integer
sCount = objBook.Worksheets.Count
Dim i As Integer
For i = 1 To sCount
If objBook.Sheets(i).Name = "data1" Then ' ชื่อ Sheet ที่ต้องการข้อมูลบนไฟล์ MS Excel
Exit For
End If
Next
Dim objSheet As Object
Set objSheet = objBook.Worksheets(i)
Dim rRng As Object
Set rRng = objSheet.Range("A1:Z100") ' กำหนดช่วงข้อมูลที่ต้องการของเซลในไฟล์ MS Excel
Dim rCell As Object
For Each rCell In rRng.Cells
rs.AddNew
rs(0) = Replace(rCell.Address, "$", "") ' rCell.Address คือค่าตำแหน่งของเซลบนไฟล์ MS Excel แต่จะติดอักษร $ มาด้วย ดังนั้นจึงต้องตัดทิ้งก่อน
rs(1) = rCell.Value ' rCell.Value คือ ข้อมูลในตำแหน่งเซลนั้นๆ
rs.Update
Next rCell
objExcel.ActiveWorkbook.Close ' ทำการปิดไฟล์ MS Excel เมื่อเสร็จ
objExcel.Quit ' ทำการปิดโปรแกรม MS Excel
Set rRng = Nothing
Set objSheet = Nothing
Set objBook = Nothing
Set objExcel = Nothing
rs.Close: Set rs = Nothing
Set db = Nothing
MsgBox "Import Completed Successfully"
'-----------------Code End-----------------
ปรับใช้ดูนะครับ
ปล. อันนี้นอกเรื่องหน่อย ไม่ได้เกี่ยวกับกระทู้นี้นะครับ คือพักนี้เหมือนมีนักศึกษาเข้ามาถามเพื่อทำงานส่งป่าวก็ไม่รู้ บางทีผมก็เริ่มคิดว่าการเขียนโค๊ดให้แบบนี้เหมือนกับรับทำการบ้านออนไลน์หรือเปล่าก็ไม่รู้ หากเป็นคนที่จะเอาไปใช้งานจริงก็ยินดีไม่เป็นไรนะครับ ถือว่าไม่ได้ศึกษามา แต่หากเป็นนักศึกษา ผมขอให้ใช้สิ่งที่เรียนมาคิดก่อนครับ การเรียนแบบ copy paste ส่งอาจารย์ สุดท้ายแล้วจะไม่ได้อะไรเลย
7 @R19845
ขอบคุณมากครับคุณ TTT จะลองปรับใช้ดู ขอแนะนำตัวครับ ผมไม่ใช่นักศึกษาครับ ผมรับราชการเป็นเภสัชกร ในโรงพยาบาลของรัฐแห่งหนึ่ง แต่มีความสนใจศึกษาหาความรู้เรื่อง Database โดยเฉพาะ MS Access,Mysql มีความรู้แค่พื้นฐานครับ ความรู้บางอย่างมันเกินความสามารถของผม จึงต้องรบกวนถามผู้รู้ใน board นี้ ซึ่งก็ช่วยได้มากเลยครับ ต้องขอขอบคุณทุกๆท่านที่ให้ความรู้อย่างที่หาได้ยากจริงๆจากตำรา
Time: 0.3837s