Xuất dữ liệu ra file text và nhập dữ liệu từ file text

Offline Hà Nội 2014 tại Đồ Sơn-Hải Phòng
Chương trình từ thiện năm 2014 tại xã Tân Mỹ, huyện Trà Ôn, tỉnh Vĩnh Long




kết quả từ 1 tới 6 trên 6
5,156 lượt xem
  1. Thành viên cấp trung Hình đại diện của luongvanluyen
    Tham gia ngày
    Sep 2005
    Địa chỉ
    HCM CITY
    Bài gửi
    27
    Post Thanks / Like
    luongvanluyen vẫn chưa có mặt trong diễn đàn

    Xuất dữ liệu ra file text và nhập dữ liệu từ file text

    Chào các bạn,
    Có đôi lúc các bạn muốn xuất dữ liệu ra file text nhằm lưu trữ hay phân phát...(Có rất nhiều lý do) thì phải làm sao?
    Tôi xin giới thiệu các bạn một đọan mã đơn giản sau, nhưng các bạn chú ý rằng các bạn phải tham chiếu đến Microsoft ActiveX Data Objects x.x Library trong Reference của mình.
    Giả sử trên file excel tôi dự định xuất ra có khối dữ liệu tên MaVatTu gồm:
    Cột Mã, Mô tả, Đvt, Tồn ĐK, Nhập từ Nhà Cung cấp, Nhập từ Sản xuất, Xuất đi gia công, Xuất vào sản xuất, Tồn hiện tại.
    Mục đích của tôi là xuất ra file "VatTuTon.txt" của cùng thư mục File excel của tôi. Và chỉ xuất ra các vật tư có số lượng tồn lớn hơn 0. Tôi có đọan mã như sau:
    Sub XuatTonHienTaiRaFileText()
    Dim theFileName As String
    Dim FileNum
    Dim bRange As Range
    Dim Hang As Long, Cot As Integer, i As Long
    Dim MaVatTu As String * 15, MoTa As String * 50, DVT As String * 5
    Dim TonHienTai As Double
    Dim bStrTonHienTai As String * 15
    Dim bStrDuaVao As String
    theFileName = GetLocalDirectory & "VatTuTon.txt"
    FileNum = FreeFile
    Set bRange = Range("MaVatTu")
    Hang = bRange.Rows.Count: Cot = bRange.Columns.Count
    ' Mo file de dua vao
    Open theFileName For Output As FileNum
    'Toi dua ten cac cot vao truoc
    'Voi chu y dinh dang chieu dai cua cac truong du lieu
    Print #FileNum, "Ma vat tu |Mo ta |Dvt | "
    For i = 1 To Hang
    'Quet qua va xuat ra file
    With bRange
    MaVatTu = Trim(.Cells(i, 1))
    MoTa = Trim(.Cells(i, 2))
    DVT = Trim(.Cells(i, 3))
    TonHienTai = CDbl(.Cells(i, 9))
    bStrTonHienTai = CStr(TonHienTai)
    bStrDuaVao = MaVatTu & "|" & MoTa & "|" & DVT & "|" & bStrTonHienTai
    If MaVatTu <> "" And TonHienTai <> 0 Then
    Print #FileNum, bStrDuaVao
    End If
    End With
    Next i
    Close FileNum ' Dong file lai
    Set bRange = Nothing
    End Sub
    Function GetLocalDirectory() As String
    Dim TStr
    TStr = ActiveWorkbook.Path
    If Right(TStr, 1) <> "\" Then TStr = TStr & "\"
    GetLocalDirectory = TStr
    End Function

    Sau đó từ một file excel khác tôi lại viết thủ tục để tôi nhập các dữ liệu trên vào. Kỹ thuật cũng giống trên dùng ADO.
    Với chú ý là file excel tôi dự định import dữ liệu vào có sheet tên "Data", và hàng dữ liệu tôi định bắt đầu đưa ra là "A2" của sheet này.

    Sub GetTextFileData(ByVal strSQL As String, ByVal strFolder As String, ByVal rngTargetCell As Range)
    ' example: GetTextFileData "SELECT * FROM filename.txt", _
    "C:\FolderName", Range("A3")
    ' example: GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _
    "C:\FolderName", Range("A3")
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Long
    Dim bDem As Long
    If rngTargetCell Is Nothing Then Exit Sub
    Set cn = New ADODB.Connection
    On Error Resume Next
    cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
    "Dbq=" & strFolder & ";" & _
    "Extensions=asc,csv,tab,txt;"
    On Error GoTo 0
    If cn.State <> adStateOpen Then Exit Sub
    Set rs = New ADODB.Recordset
    On Error Resume Next
    rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
    On Error GoTo 0
    If rs.State <> adStateOpen Then
    cn.Close
    Set cn = Nothing
    Exit Sub
    End If

    'Bat dau xuat ra file
    With rngTargetCell
    bDem = 0

    rs.MoveFirst
    While Not rs.EOF
    .Offset(bDem, 0).Value = Mid(rs.Fields(0).Value, 1, 15)
    .Offset(bDem, 1).Value = Mid(rs.Fields(0).Value, 17, 50)
    .Offset(bDem, 2).Value = Mid(rs.Fields(0).Value, 68, 5)
    .Offset(bDem, 3).Value = Mid(rs.Fields(0).Value, 74, 15)
    bDem = bDem + 1
    rs.MoveNext
    Wend

    End With
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    End Sub
    Function GetLocalDirectory() As String
    ' Lay duong dan cua Active workbook
    ' Va bao dam rang co "\" cuoi duong dan
    Dim TStr
    TStr = ActiveWorkbook.Path
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''
    If Right(TStr, 1) <> "\" Then TStr = TStr & "\"
    GetLocalDirectory = TStr
    End Function
    Function GetLocalDirectoryWT() As String
    ' Lay duong dan cua Active workbook
    ' Va bao dam rang khong co "\" cuoi duong dan

    Dim TStr
    TStr = ActiveWorkbook.Path
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''
    If Right(TStr, 1) = "\" Then TStr = Mid(TStr, 1, Len(TStr) - 1)
    GetLocalDirectoryWT = TStr
    End Function

    Sub NhapDuLieu()
    Dim bRange As Range
    Dim TenThuMuc
    'Xoa du lieu truoc khi dua du lieu vao
    Set bRange = Range("DuLieuXoa")
    bRange.Clear
    TenThuMuc = GetLocalDirectoryWT
    Call GetTextFileData("SELECT * FROM VatTuTon.txt", TenThuMuc, Range("A2"))
    End Sub

    Tại sheet "Data" tôi định dạng hàng đầu tiên như sau:
    A1: Mã vật tư; B1: Mô tả; C1: Đvt; D1: Số lượng tồn hiện tại
    và tôi tạo một nút lệnh gọi thủ tục NhapDuLieu như trên.
    Thế là tôi đã giới thiệu sơ lược dùng ADO để xuất và lấy dữ liệu.
    Tham khảo từ trang web Erlandsen Data Consulting, Vovisoft

    Lương Văn Luyện

    Xem thêm các bài viết mới nhất trong cùng chuyên mục này:

    thay đổi nội dung bởi: luongvanluyen, ngày 02-09-2005 lúc 20:29

  2. Khu vực quảng cáo
    Tham gia ngày
    Always
    Địa chỉ
    Advertising world
    Bài gửi
    Many

     

  3. Thành viên cấp trung Hình đại diện của luongvanluyen
    Tham gia ngày
    Sep 2005
    Địa chỉ
    HCM CITY
    Bài gửi
    27
    Post Thanks / Like
    luongvanluyen vẫn chưa có mặt trong diễn đàn
    To:All,
    Trong chương trình này còn thiếu một phần quan trọng không biết có ai phát hiện không? Nếu phát hiện tôi sẽ đãi một chầu! Linh đình! Hì Hì Hì
    Hình như các bạn không quan tâm vấn đề này lắm...Nhập/Xúất dữ liệu?
    Lương Văn Luyện
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''
    Just call my name, I'll be there.
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''

  4. Thành viên Hình đại diện của poss_lp
    Tham gia ngày
    Aug 2005
    Địa chỉ
    Ha noi
    Tuổi
    29
    Bài gửi
    3
    Post Thanks / Like
    poss_lp vẫn chưa có mặt trong diễn đàn
    Hi ban! Toi thay hien nay cac phan mem ke toan deu co phan xuat khau du lieu day chu nhi.

  5. Thành viên cấp trung Hình đại diện của workman
    Tham gia ngày
    Jul 2005
    Địa chỉ
    Ho Chi Minh
    Tuổi
    42
    Bài gửi
    372
    Post Thanks / Like
    workman vẫn chưa có mặt trong diễn đàn
    Trích nguyên văn Nguyên văn bởi luongvanluyen
    To:All,
    Trong chương trình này còn thiếu một phần quan trọng không biết có ai phát hiện không? Nếu phát hiện tôi sẽ đãi một chầu! Linh đình! Hì Hì Hì
    Hình như các bạn không quan tâm vấn đề này lắm...Nhập/Xúất dữ liệu?
    Lương Văn Luyện
    Thật ra tôi chỉ dốt đặc về việc này nên không dám bình luận bậy bạ, sợ bác Luyện cười cho. Tuy nhiên tôi nghĩ mãi mà chưa hiểu tại sao lại phải xuất ra text nhỉ? Hiện giờ máy nào mà chẳng có excel.

    Thông thường nếu ta có nhiều database khác nhau thì thường chỉ có nhu cầu xuất ra dạng chuẩn csv là đáp ứng được gần hết. Tôi dùng hệ thống kế toán chạy trên SQL, link với mấy cái Electronic Banking đều thông qua dạng csv cả, thấy chạy ngon lắm.

  6. Thành viên cấp trung Hình đại diện của luongvanluyen
    Tham gia ngày
    Sep 2005
    Địa chỉ
    HCM CITY
    Bài gửi
    27
    Post Thanks / Like
    luongvanluyen vẫn chưa có mặt trong diễn đàn
    Trích nguyên văn Nguyên văn bởi workman
    Tuy nhiên tôi nghĩ mãi mà chưa hiểu tại sao lại phải xuất ra text nhỉ? Hiện giờ máy nào mà chẳng có excel.

    Thông thường nếu ta có nhiều database khác nhau thì thường chỉ có nhu cầu xuất ra dạng chuẩn csv là đáp ứng được gần hết. Tôi dùng hệ thống kế toán chạy trên SQL, link với mấy cái Electronic Banking đều thông qua dạng csv cả, thấy chạy ngon lắm.
    To: workman,
    Vấn đề này đã có nhiều bạn đặt vấn đề rồi. Đối với bản thân tôi thì tôi gặp vấn đề như thế này. Tôi có một file theo dõi vật tư, tôi để ở chế độ share. Thì mọi người đều có thể mở để xem tồn hiện tại. Với lý do này nên tôi mới lập trình để yêu cầu cô nhân viên nhập dữ liệu xong rồi xuất dữ liệu ra file text (Thật sự ra file excel cũng được...) Rồi từ một file excel khác hay một chương trình viết bằng VB mọi người ở mọi máy đều có thể xem tồn hiện tại. Vấn đề xuất ra file text này còn có một ý nghĩa khác là tổng hợp số liệu từ các client (các nhà máy con, các phân xưởng con...) rồi gởi dữ liệu về (đỡ sợ virus) văn phòng và tại đây chúng ta có thể tổng hợp số liệu một cách dễ dàng. Đây cũng là vấn đề có một người bạn ở HN hỏi tôi. Vì anh này có nhiều chi nhánh, mỗi chi nhánh đều sử dụng file excel định dạng khác nhau. Và vấn đề tổng hợp số liệu lúc này sẽ gặp khó khăn.
    Nhân tiện đây, khi dùng ADO để nhập dữ liệu vào file excel các bạn cũng phải chú ý là phải có một file Schema.ini với nội dung như sau:
    [VatTuTon.txt] 'Tên file bạn muốn nhập
    Format=Delimited(|) 'Các trường dữ liệu cách nhau bởi dấu |
    ColNameHeader=True 'Có tên trường ở hàng đầu
    MaxScanRows=0
    CharacterSet=ANSI

    Như vậy là bạn có thể dùng ADO để nhập dữ liệu này vào excel hay các database khác.

    Các bạn có thể chia sẻ vấn đề này tại đây.

    Lương Văn Luyện
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''
    Just call my name, I'll be there.
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''

  7. Welcome Hình đại diện của levanduyet
    Tham gia ngày
    Oct 2004
    Địa chỉ
    HCM
    Bài gửi
    534
    Post Thanks / Like
    levanduyet vẫn chưa có mặt trong diễn đàn
    Chúng ta có thể tham khảo code của ASAP về việc import dữ liệu từ file text mà các trường dữ liệu cách nhau bởi "|". Nhưng nó sẽ không được linh động nếu bạn vừa nhập liệu vừa kiểm tra dữ liệu, lọc trước khi nhập vào.
    Lê Văn Duyệt

    Sub Import_InsertTextFileDelimitedBar()
    Call ASAPChkProtSheet
    Call ASAPChkRange
    FileToOpen = Application.GetOpenFilename("Text file (*.*), *.*", , "ASAP Utilities - insert text file")
    If FileToOpen <> False Then
    Set SaveLoc = ActiveCell
    For Each OpenWorkbook In Application.Workbooks
    If OpenWorkbook.FullName = FileToOpen Then
    GoTo AlOpen
    Else
    End If
    Next OpenWorkbook
    Application.ScreenUpdating = False
    On Error Resume Next
    Workbooks.OpenText Filename:=FileToOpen, DataType:=xlDelimited, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False _
    , Space:=False, Other:=True, OtherChar:="|"
    ActiveSheet.UsedRange.Copy Destination:=SaveLoc
    Application.CutCopyMode = False
    ActiveWorkbook.Close savechanges:=False
    Set SaveLoc = Nothing
    Else
    End If
    Exit Sub


Thread Information

Users Browsing this Thread

Hiện tại có 1 người đang truy cập đề tài này gồm: (0 thành viên và 1 khách)

Visitors found this page by searching for:

vba xuat du lieu ra file .txt

access xuất dữ liệu ra file txt

xuat du lieu excel ra text

vba xuat du lieu ra file txt

vba xuất dữ liệu ra file txt trong access

do du lieu txt vao sheet

dinh dang du lieu excel bang vb6