Извлечение данных с Excel

Вы могли динамично добавить форму с помощью DHTML и затем отправить.

5
задан Rodrigo 24 July 2009 в 22:09
поделиться

7 ответов

Я написал это много лет назад, но, возможно, это поможет вам. Я добавил расширение для последней версии Excel (xlsx). Кажется, работает.

Sub MergeExcelDocs()
    Dim lastRow As Integer
    Dim docPath As String
    Dim baseCell As Excel.range
    Dim sysObj As Variant, folderObj As Variant, fileObj As Variant
    Application.ScreenUpdating = False
    docPath = Application.GetOpenFilename(FileFilter:="Text Files (*.txt),*.txt,Excel Files (*.xls),*.xls,Excel 2007 Files (*.xlsx),*.xlsx", FilterIndex:=2, Title:="Choose any file")
    Workbooks.Add
    Set baseCell = range("A1")
    Set sysObj = CreateObject("scripting.filesystemobject")
    Set fileObj = sysObj.getFile(docPath)
    Set folderObj = fileObj.ParentFolder
    For Each fileObj In folderObj.Files
        Workbooks.Open Filename:=fileObj.path
        range(range("A1"), ActiveCell.SpecialCells(xlLastCell)).Copy
        lastRow = baseCell.SpecialCells(xlLastCell).row
        baseCell.Offset(lastRow, 0).PasteSpecial (xlPasteValues)
        baseCell.Copy
        ActiveWindow.Close SaveChanges:=False
    Next
End Sub

РЕДАКТИРОВАТЬ:

Я должен упомянуть, как это работает. Когда вы запускаете макрос, он вызывает диалоговое окно «Открыть файл». Дважды щелкните первый файл в списке (или любой файл, если на то пошло). Он создаст новую книгу, а затем переберет все файлы в папке. Для каждого файла он копирует все содержимое из первого листа и вставляет его в конец новой книги. Вот и все.

3
ответ дан 18 December 2019 в 14:49
поделиться
​​

Вы пытались

Tools->Macro->Record New Macro 

создать maco, чтобы сделать то же самое

1
ответ дан 18 December 2019 в 14:49
поделиться

Другое решение - предоставить вашей сводной таблице доступ к другим таблицам по имени файла и захватить сами данные.

Для этого вам необходимо открыть все таблицы. в то же время, поэтому он может обновлять ссылки, но это все равно, вероятно, быстрее, чем открывать и копировать / вставлять по одной, даже с помощью макроса. У каждой электронной таблицы должно быть уникальное имя файла.

Если имена таблиц не известны до тех пор, пока вы их не получите, или они регулярно меняются, создайте столбец в сводной таблице для хранения имен файлов листов, затем создайте нужный адрес, используя манипуляции со строками, и получите данные с помощью INDIRECT ().

Пример получения одной ячейки данных из одного конкретного файла:

=INDIRECT("'[C:\path\workbook.xls]MyWorksheet'!$A$2")

Промойте и повторите описанные выше действия для каждой ячейки каждой электронной таблицы, которую вы хотите получить.

Вы должны уметь правильно передать строку в INDIRECT (). Создайте ее как формулу, чтобы вы могли использовать буквально ту же формулу для каждой ячейки, которую вам нужно получить.

Пример:

= INDIRECT("'[" & $A2 & "]MyWorksheet'!$" & ADDRESS(3, COL()))

Формула выше перейдет в электронную таблицу, имя файла которой находится в $ A2 ( обратите внимание на отсутствие $ перед "2", чтобы вы могли вставить ту же формулу в другие строки для других файлов) и получите значение ячейки на листе MyWorksheet в строке 3 и столбце current (так , если он находится в B2 на вашем сворачивании, он получает B3 из другого файла).

Настройте функцию АДРЕС, чтобы добавить смещения к необходимой строке и столбцу.

Преимущество вышеприведенного решения состоит в том, что ту же формулу можно скопировать и вставить в строки и столбцы, которые необходимо заполнить, и Excel при необходимости скорректирует $ A2 и COL (). Очень удобен в обслуживании.

Отредактируйте , как только у меня была аналогичная ситуация, и я не мог загрузить все таблицы сразу (более 200). Я думаю, что закончил тем, что написал VBA, поэтому он , а не на самом деле открывал и читал файлы Excel. Вместо этого я заставил его перебирать имена файлов, открывать ODBC-соединение с каждым и использовать ADO для чтения необходимых мне значений из заданного именованного диапазона (который отображается как «таблица» в ODBC - рабочие листы также отображаются как «таблицы» "но есть правила о разрешенных именах). Это было намного быстрее, чем открытие и закрытие файлов Excel, и имело дополнительное преимущество, заключающееся в отсутствии сбоев Excel.

Я думаю, что закончил тем, что написал VBA, поэтому он , а не на самом деле открывал и читал файлы Excel. Вместо этого я заставил его перебирать имена файлов, открывать ODBC-соединение с каждым и использовать ADO для чтения необходимых мне значений из заданного именованного диапазона (который отображается как «таблица» в ODBC - рабочие листы также отображаются как «таблицы» "но есть правила о разрешенных именах). Это было намного быстрее, чем открытие и закрытие файлов Excel, и имело дополнительное преимущество, заключающееся в отсутствии сбоев Excel.

Я думаю, что закончил тем, что написал VBA, поэтому он , а не на самом деле открывал и читал файлы Excel. Вместо этого я заставил его перебирать имена файлов, открывать ODBC-соединение с каждым и использовать ADO для чтения необходимых мне значений из заданного именованного диапазона (который отображается как «таблица» в ODBC - листы также отображаются как «таблицы» "но есть правила о разрешенных именах). Это было намного быстрее, чем открытие и закрытие файлов Excel, и имело дополнительное преимущество, заключающееся в отсутствии сбоев Excel.

2
ответ дан 18 December 2019 в 14:49
поделиться

Вот код VBA, демонстрирующий перебор нескольких файлов Excel в каталоге и открытие каждого из них:

Dim sourcePath As String
Dim curFile As String
Dim curWB As Excel.Workbook
Dim destWB As Excel.Workbook

Set destWB = ActiveWorkbook
sourcePath = "C:\files"

curFile = Dir(sourcePath & "\*.xls")
While curFile <> ""
    Set curWB = Workbooks.Open(sourcePath & "\" & curFile)

    curWB.Close
    curFile = Dir()
Wend 

Надеюсь, это будет достаточно хорошей отправной точкой для работы с существующими код макроса.

6
ответ дан 18 December 2019 в 14:49
поделиться

Родриго,

Я предполагаю, что вы имеете в виду более 100 книг, которые вам нужно открывать по отдельности, копировать и вставлять в одну? Звучит весело :)

Если бы вы могли поместить их все в один каталог, открытие каждого файла было бы достаточно простым делом, сначала выполните поиск по нему. (@Mark Biek опубликовал для вас хороший пример)

Как только вы откроете файл, я скопирую данные в набор записей ADO, который вы затем добавите. Я опубликовал некоторый код для выполнения чего-то очень похожего с объединением нескольких листов в одну книгу.

Это не совсем то, что вам нужно, но должно помочь. Если нет, напишите, как далеко вы продвинулись, и я еще раз посмотрю в течение недели.

1
ответ дан 18 December 2019 в 14:49
поделиться

Этого можно достичь с помощью TransferSpreadsheet в Access. См. Эту ссылку:

http://datapigtechnologies.com/blog/index.php/using-access-to-combine-multiple-excel-files-method-2/comment-page-1/#comment-1741

Это решение не требует VBA.

0
ответ дан 18 December 2019 в 14:49
поделиться

Раньше я использовал VBA для создания внешних ссылок (ссылок).

Я писал об этом здесь (см. Пример 2):

Лучшие короткие примеры необходимости для Excel VBA

Это похоже на использование INDIRECT, но без необходимости открывать книги Excel.

Единственным недостатком является то, что старый компьютер или старая версия Excel, не зная, какая именно, может замедлить этот процесс. Я считаю, что это потому, что каждый раз, когда добавляется новая внешняя ссылка, все остальные внешние ссылки обновляются. Чтобы ускорить процесс, я установил для вычисления значение «Вручную», добавил внешние ссылки и установил для «Расчет» значение «Автоматически», чтобы обновить их.

0
ответ дан 18 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: