Arhn - архитектура программирования

Скопируйте значения из столбца S из многих файлов Excel в папку и вставьте в специальный файл vb.net

Я хочу просмотреть папку и прочитать первый файл Excel, скопировать данные в столбец S и вставить их в другую книгу, затем прочитать второй файл и вставить значения после последней строки предыдущей вставки и т. д.

Мой код

    '''
    Public MyFolder As String
    Public MyFile As String
    Public eRow As Long
    Dim xl As New Excel.Application
    With 
 xl.FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Show()
        MyFolder = .SelectedItems(1) & "\"
        Err.Clear()
    End With
    MyFile = Dir(MyFolder & "\*.xls*", FileAttribute.ReadOnly)
    Dim BBSVal As String
    Dim Lastrow As Long
    BBSVal = cboBBS.Text
    Do While Len(MyFile) > 0
        xl.Workbooks.Open(Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False)
        Lastrow = xl.ActiveSheet.UsedRange.Rows.Count
        xl.ActiveSheet.Range("S1", "S" & Lastrow).Copy()
        xl.ActiveWorkbook.Close(SaveChanges:=vbTrue)
        eRow = xl.Worksheets("BBSName").Cells(xl.Rows.Count, 1).End(Excel.XlDirection.xlUp).Offset(1, 0).Row
        xl.Worksheets("BBSName").Range("A" & eRow.ToString).PasteSpecial()
    Loop
    MyFile = Dir(MyFolder)
'''

Код работает без ошибок, но вставка в указанный файл не выполняется ??? Ваша помощь высоко ценится

Спасибо. С уважением Мохеб Лабиб

08.06.2020

Ответы:


1
     Sub CopyData(ToFile As String, ToSheet As String, ToCol As String, FromFolder As String, FromSheet As String, FromCol As String)
        Dim Xl As New Microsoft.Office.Interop.Excel.Application
        Dim dWorkBook As Workbook
        Try
            Xl.Workbooks.Open(ToFile)
            dWorkBook = Xl.Workbooks(FileIO.FileSystem.GetName(ToFile))
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & "file not found or bad format or access error")
            Xl.Application.Quit()
            Xl.Quit()
            Exit Sub
        End Try
        Dim dSheet As Worksheet
        Try
            dSheet = dWorkBook.Sheets(ToSheet)
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & "sheet not found or bad name 'ToSheet'")
            Xl.Application.Quit()
            Xl.Quit()
            Exit Sub
        End Try
        If IO.Directory.Exists(FromFolder) = False Then
            MessageBox.Show("Bad path 'FromFolder'" & vbCrLf & FromFolder)
            Xl.Application.Quit()
            Xl.Quit()
            Exit Sub
        End If
        Dim sfiles As String() = IO.Directory.GetFiles(FromFolder, "*.xlsx", SearchOption.TopDirectoryOnly)
        If sfiles.Count = 0 Then
            MessageBox.Show("no excel files '*.xlsx' in directory 'FromFolder'" & vbCrLf & FromFolder)
            Xl.Quit()
            Exit Sub
        End If

        Dim ErrMsg As String = "Error list" & vbCrLf
        Dim faild As Integer = 0
        For Each X As String In sfiles
            Dim tmpWorkBook As _Workbook
            Try
                Xl.Workbooks.Open(X)
                tmpWorkBook = Xl.Workbooks(FileIO.FileSystem.GetName(X))
            Catch ex As Exception
                ErrMsg &= "bad format or access error " & X & vbCrLf
                faild += 1
                GoTo 1
            End Try
            Dim tmpSheet As _Worksheet
            Try
                tmpSheet = tmpWorkBook.Sheets(FromSheet)
            Catch ex As Exception
                ErrMsg &= "sheet not found or bad name  File: " & X & vbCrLf
                faild += 1
                tmpWorkBook.Close()
                GoTo 1
            End Try

            Dim ToRange As Range = dSheet.Range(ToCol & dSheet.Rows.Count).End(XlDirection.xlUp).Offset(1, 0)

            Dim FromRange As Range = tmpSheet.Range(FromCol & "1").End(XlDirection.xlDown)
            Dim tmpAddress As String = FromRange.Address
            FromRange = FromRange.End(XlDirection.xlDown)
            tmpAddress &= ":" & FromRange.Address
            If tmpAddress.EndsWith("1048576") Then
                ErrMsg &= "Column is empty :[ " & FromCol & " ]    File: " & X & vbCrLf
                tmpWorkBook.Close()
                faild += 1
                GoTo 1
            End If
            FromRange = tmpSheet.Range(tmpAddress)
            FromRange.Copy(ToRange)

            tmpWorkBook.Close()

1:
        Next


        dWorkBook.Close(True)
        Xl.Application.Quit()
        Xl.Quit()
        If ErrMsg.Length < 13 Then ErrMsg &= "No Errors" & vbCrLf
        ErrMsg = "Success :" & sfiles.Count - faild & vbCrLf & "Failed :" & faild & vbCrLf & vbCrLf & ErrMsg
        MessageBox.Show(ErrMsg)
    End Sub

использование

Это скопирует данные из столбца исходной таблицы A в столбец S листа1.

CopyData("c:\test.xlsx", "Sheet1", "S", "D:\folder", "sourceSheet", "A")
09.06.2020
  • Спасибо за ваш ответ, однако я получаю сообщение об ошибке в строке: Dim CopiesRow As Long = xl.ActiveWorkbook.Sheets("SCHEDULE").Column("S").CurrentRegion.Count, CurrentRegion.count здесь не работает 09.06.2020
  • @ Мо Халефа, обратите внимание: мои исходные файлы Excel имеют лист с именем Schedule, столбец S находится на этом листе, а мой целевой файл — C:\Patches\Main_Master.xlsm и имеет лист с именем Master, мне нужно скопировать столбец S из расписания в основную колонку А, спасибо 09.06.2020
  • @ Мо Халефа, Любой ответ 10.06.2020
  • Если у кого-то есть ответ, пожалуйста, этот ответ не работает, спасибо 10.06.2020
  • Я редактирую код, теперь вы можете переписать его в соответствии со своими потребностями. 10.06.2020
  • Ценю, что вы исправили только мой код, исправьте только ошибку в моем коде, мне не нужен новый код, я хочу исправить только одну строку в моем коде, ценю, что вы это делаете, спасибо 11.06.2020
  • Xl.ActiveSheet.Range(S & eRow.ToString).PasteSpecial() 11.06.2020
  • @ Мо Халефа, я отредактировал свой код и изменил вставной код пробела, и он все еще не работает ??? 11.06.2020
  • @Meho2016 это все еще не работает ??? этого недостаточно, обнаружена ли ошибка ?! или что ?! 11.06.2020
  • @ Мо Халефа, сообщение об ошибке не появляется, но процесс копирования и вставки не завершен, лист BBSName пуст, спасибо 14.06.2020
  • @ Мо Халефа, спасибо, а как мне вызвать эту процедуру, ведь у нее есть параметры 16.06.2020
  • @ Мо Халефа, применение вашего кода дало ошибку: в строке: tmpSheet = tmpWorkBook.Sheets(FromSheet) System.Runtime.InteropServices.COMException: 'Invalid index. (Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))' 18.06.2020
  • Invalid index. означает: вы передали неправильное имя листа, вам нужно проверить имя листа во всех книгах 18.06.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..