lấy dử liệu từ file excel sang table của acess

longvit04

New Member
Hội viên mới
em có table tên là bangchung gồm các trường so, ngay, mavb, macv, maphong, trichyeu, manoinhan, noinhankhac trong đó khóa chính là so, và mavb em có file excel gom 3 cột là so, ngày,loai, trich yeu em muốn lấy dữ liệu file excel này sang table trên được không mong các anh hướng dẫn dùm!
 

suynghidi

Thèm một số thứ!
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

em có table tên là bangchung gồm các trường so, ngay, mavb, macv, maphong, trichyeu, manoinhan, noinhankhac trong đó khóa chính là so, và mavb em có file excel gom 3 cột là so, ngày,loai, trich yeu em muốn lấy dữ liệu file excel này sang table trên được không mong các anh hướng dẫn dùm!
1/ Cách đơn giản nhất (ít dùng): Tạo table trong Access giống y chang cấu trúc trong file Excel, đặt tên là T_Bangchung (giả sử T_bangchung có thêm trường "Ngay_sốliệu" để phân biệt các kỳ số liệu khác nhau--> Copy dữ liệu từ Excel gián vào table T_Bangchung, với trường "Ngày_sốliệu" khác nhau cho từng đợt copy. Xong
2/ Cách bán thủ công:
Bước 1: tạo Macro, có comand là Import, sau đó tạo menu để link tới Macro này. Khi cần import dữ liệu, bạn bấm vào Menu này --> Bạn chọn file Excel --> chọn table là T_bangchung. Ok...
3/ cách 3: Viết code : Cái này SND chưa thử nên chưa biết... Chờ các cao thủ lên tiếng..:cheers1:
 

longvit04

New Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

mình thấy không ổn:sweatdrop:
 

phatnq2002

Tích cực giảm cân...
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

mình thấy không ổn:sweatdrop:
Làm theo cách 1 của suynghidi là "ổn" nhất, phẻ re nhất. :thumbup:

Sau đó "chế biến" một thủ tục để gọi lệnh :
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, tablename,Excelfilename, True
là được.
 

longvit04

New Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

mấy huynh có thể nói cụ thể hơn một chúc không?:sweatdrop:
 

phatnq2002

Tích cực giảm cân...
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

mấy huynh có thể nói cụ thể hơn một chúc không?:sweatdrop:

Trước tên để "chỉ" cho bạn, tôi đang thắc mắc là table bangchung của bạn có Primary key là hai field so và mavb, trong khi file Excel của bạn có so mà không có mavb, vậy thì khi insert vào nó chửi sao? Hay là loai trong Excel tương đương với mavb trong Access?

Thôi tôi tạm coi như vậy đi:

Đầu tiên bạn làm một cái "ăn gian" sau:
Từ Access, bạn cho import data từ file Excel cái range mà bạn chứa thông tin bạn cần đưa vào (số, ngày,loại, trích yếu. Đúng không?)

Rồi bạn làm cái procedure sau: (Private nếu bạn để chung với code của một form nào đó, Public nếu bạn để trong trang module dùng chung)

[Private/Public] Sub InsertFromExcel()
CurrentDB.Excecute "DELETE * FROM table_chứa_dữ_liệu_import_từ_Excel"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "bangchung",tên_đầy_đủ_của_file_Excel, True
CurrentDB.Excecute "INSERT INTO bangchung (so, mavb, ngay, trichyeu) SELECT so, loai, ngay, trichyeu FROM table_chứa_dữ_liệu_import_từ_Excel"
End Sub

Rồi từ một cái form nào đó, bạn cho một nút lệnh, bạn cho cái thủ tục sự kiện Click một câu duy nhất:
InsertFromExcel

Thế thôi !!!
 

suynghidi

Thèm một số thứ!
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Trước tên để "chỉ" cho bạn, tôi đang thắc mắc là table bangchung của bạn có Primary key là hai field so và mavb, trong khi file Excel của bạn có so mà không có mavb, vậy thì khi insert vào nó chửi sao? Hay là loai trong Excel tương đương với mavb trong Access?

Thôi tôi tạm coi như vậy đi:

Đầu tiên bạn làm một cái "ăn gian" sau:
Từ Access, bạn cho import data từ file Excel cái range mà bạn chứa thông tin bạn cần đưa vào (số, ngày,loại, trích yếu. Đúng không?)

Rồi bạn làm cái procedure sau: (Private nếu bạn để chung với code của một form nào đó, Public nếu bạn để trong trang module dùng chung)

[Private/Public] Sub InsertFromExcel()
CurrentDB.Excecute "DELETE * FROM table_chứa_dữ_liệu_import_từ_Excel"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "bangchung",tên_đầy_đủ_của_file_Excel, True
CurrentDB.Excecute "INSERT INTO bangchung (so, mavb, ngay, trichyeu) SELECT so, loai, ngay, trichyeu FROM table_chứa_dữ_liệu_import_từ_Excel"
End Sub

Rồi từ một cái form nào đó, bạn cho một nút lệnh, bạn cho cái thủ tục sự kiện Click một câu duy nhất:
InsertFromExcel

Thế thôi !!!
Nếu tên file khác nhau theo kỳ (hằng tháng), và có nhiều file excel cho các Table khác nhau, thì phải thêm thủ tục chọn file chứ anh?
Em đang nghiên cứu và ứng dụng thằng AutoIT cho các công việc này. Sau khi đã có ứng dụng Access chuẩn, làm một kịch bản (viết lệnh trong AutoIT), hẹn giờ để cho nó chạy....(vì dữ liệu hằng tháng em xử lý rất nhiều (từ phần mềm Lớn --> trích xuất một số dữ liệu ra Excel theo các file mẫu--> Ứng dụng Access của mình). --> Có time ún cafe mà máy vẫn cứ làm :ibbanana::ibbanana:
 

phatnq2002

Tích cực giảm cân...
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Nếu tên file khác nhau theo kỳ (hằng tháng), và có nhiều file excel cho các Table khác nhau, thì phải thêm thủ tục chọn file chứ anh?
Em đang nghiên cứu và ứng dụng thằng AutoIT cho các công việc này. Sau khi đã có ứng dụng Access chuẩn, làm một kịch bản (viết lệnh trong AutoIT), hẹn giờ để cho nó chạy....(vì dữ liệu hằng tháng em xử lý rất nhiều (từ phần mềm Lớn --> trích xuất một số dữ liệu ra Excel theo các file mẫu--> Ứng dụng Access của mình). --> Có time ún cafe mà máy vẫn cứ làm :ibbanana::ibbanana:
Thì cái chi tiết hơn mấy chú phải chế biến thêm chứ? Không lẽ nói hết? Phải để dành chỗ cho mọi người nghiên cứu cho riêng mình.
:hysterical:
 

suynghidi

Thèm một số thứ!
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Thì cái chi tiết hơn mấy chú phải chế biến thêm chứ? Không lẽ nói hết? Phải để dành chỗ cho mọi người nghiên cứu cho riêng mình.
:hysterical:
Thì biết thế mờ, lâu lâu cũng nên khều khều lại mấy topic này cho nó rôm rả, anh em nào chưa có dịp đọc thì nó nhảy lên mục "Bài mới" - Một công đôi việc :ibbanana::ibbanana:
 

behattieu

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Access cũng có thể cho chạy tự động mà. Bản thân nó có thể coding được nên mình nghĩ cũng đơn giản thôi.VD
Để nhập 1 loại các file xls thì ta cho đánh số thứ tự các file này rồi cho nó 1 cái vòng lặp trong access. Khi input vào access cho nó là 1 cái tabletmp chẳng hạn. Sau đó kiểm tra xem 1 giá trị trong bảng để xem đưa dữ liệu vừa nhập đến bảng nào, xong rồi thì xóa bảng tạm đó và chạy lại vòng lặp là xong
 

Access2k

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Từ trước đến nay chỉ xuất Access sang Exel, nay lại có chuyện làm ngược.
Bạn thử theo cách này, đó là Link File Exel sang Access.
Nếu code của nút lệnh thì là:

Private Sub Command0_Click()
DoCmd.RunCommand acCmdLinkTables
End Sub


Chọn Type là Exel, chọn File Exel cần nhập, OK, vậy là bạn đã có 1 table tên là Sheet1.
Bạn tha hồ mà viết code nhập xuất, copy và xem table.
Điều thú vị nhất là khi bạn sửa dữ liệu trong table Sheet1 đó thì dữ liệu trong File Exel cũng thay đổi theo.
 
Sửa lần cuối:

behattieu

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Điều thú vị nhất là khi bạn sửa dữ liệu trong table Sheet1 đó thì dữ liệu trong File Exel cũng thay đổi theo.[/COLOR]
Bản thân câu lệnh này nói nên điều đó rồi mà " DoCmd.RunCommand acCmdLinkTables"
 

haocaocu

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Cho minh co y kien :
Import từ Excel vao Access thì như hướng dẫn của bạn trên là nó ok. Import nhiều file khác nhau cũng ok.Nhưng trong lần thứ 2->n trường hợp mình muốn import nhiều file vào thì phải xoá các table cũ trong access đi nó sẽ mất liên kết các table với nhau. Làm sao mà xoá các table vẫn không mất các liên kết(hay là chỉ xoá bản ghi). Ai biết chỉ giùm với
Code đây :
Tạo 1 modul
Public Sub ImporttoData(TenFile As String, TenTable As String)
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
TenTable, TenFile, True
End Sub
Tạo 1 nút lệnh đặt sự kiện click
Private Sub cmdDocDuLieuTuExcel_Click()
Dim ngay, thang, nam As Integer
Dim Path As String
Path = "c:-/"
ImporttoData Path & "file1.XLS", "QLKH"
ImporttoData Path & "file2.XLS", "QLBH"
End Sub
:banghead::banghead::banginvg1::banginvg1:
 

Access2k

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Bạn xóa table thì các liên kết table đó không còn.
Bạn cứ Import các file vào database sau đó viết code liên kết các table lại.

Đây là code cơ bản để liên kết table_cha, table_con qua Filed_ID.
Quan hệ 1-nhiều:

Dim rl1 As DAO.Relation
Set rl1 = Currentdb.CreateRelation("", "", "", dbRelationRight + dbRelationUpdateCascade + dbRelationDeleteCascade)
rl1.Fields.Append rl1.CreateField("")
rl1.Fields("").ForeignName = ""
Currentdb.Relations.Append rl1
Set rl1=nothing


Tên trong ngoặc <> thay đổi cho phù hợp.
Phải chọn DAO3.6: nhấn Alt+11, chọn Tool, chọn Ref... , chọn Microsoft DAO 3.6.
Field trong các table phải định nghĩa đúng, nếu không sẽ lỗi.
 

behattieu

Member
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Cứ để nguyên các quan hệ như cũ. Bạn hãy làm như sau:
1. tạo 1 table temp
2. Chuyển dữ liệu từ excel vào temp
3. Chèn dữ liệu từ temp vào table chuẩn
4. Xoá toàn bộ dữ liệu trên table temp
 

suynghidi

Thèm một số thứ!
Hội viên mới
Ðề: lấy dử liệu từ file excel sang table của acess

Cứ để nguyên các quan hệ như cũ. Bạn hãy làm như sau:
1. tạo 1 table temp
2. Chuyển dữ liệu từ excel vào temp
3. Chèn dữ liệu từ temp vào table chuẩn
4. Xoá toàn bộ dữ liệu trên table temp
Đúng y các bước SND vẫn đang áp dụng tại các tools của mình (vì đặc thù dữ liệu phải lấy từ ứng dụng lớn (Ứng dụng này không cho viết truy vấn SQL trực tiếp - cho xuất dữ liệu ra Excel với 6 cấu trúc Table khác nhau). Vì thế chỉ có cách là Import Excel vào dữ liệu của mình.
Bổ sung chi tiết hơn chút trong các Bước của behattieu:
Bước 1/ Tạo Table Tạm : Tùy thuộc vào ứng dụng của bạn, theo mình thì các Table tạm này được tạo trong quá trình thiết kế (giống nguyên cấu trúc file Excel). Như vậy, có 3 cấu trúc file Excel thì có 3 Table rỗng cùng cấu trúc.
Bước 2 / Bạn tạo các Macro - ví dụ với tên là ImportExcel, trong đó có các bước để import dữ liệu - Gồm các Action sau:
B2.1 - Action "Import" - Để import file excel (nếu có 3 file excel cần import vào 3 table tạm thì bạn có 3 action trên 3 dòng của Marcro như thế). Hoặc bạn viết một đoạn code để import.
B2.2 - Action thứ 2 là Chạy Append Query đã được thiết kế sẵn. Query này có nhiệm vụ nhặt dữ liệu từ table tạm nối vào table gốc - Thường thì cấu trúc ở table gốc khác với Table tạm ở field Ngày dữ liệu để không trùng khoá. Như vậy trong query này sẽ có field "Ngày dữ liệu" - Điều kiện khi chạy query là nhập ngày dữ liệu import vào - có thể nhập tay hoặc có thể tham chiếu đến form Import có Control là Ngày dữ liệu
B2.3 - Action thứ 3 là xóa all data trong table tạm sau khi đã nối dữ liệu vào Table gốc. Chạy hộp thoại thông báo quá trình import đã hoàn tất.
Bước 3/ Tạo menu chạy Macro ImportExcel/ hoặc form có nút lệnh chạy Macro ImportExcel + text Ngày dữ liệu (để Append Query ở trên tham chiếu - khỏi nhập tay ngày dữ liệu).
Bước 4/ Sử dụng : Mỗi ngày/ kỳ có dữ liệu excel cần nối vào thì ta....run run..
Trong quá trình làm chúng ta có thể thêm các code để xử lý các thông báo lỗi, warning...
Hiện SND làm bằng cách nghiệp dư này. Nếu anh chị em nào có cách làm bằng coding hay hơn thì xin trình bày chi tiết để được học hỏi và áp dụng.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top