Экспорт результатов запроса кросс-таблицы в Excel из MS Access. Экспорт access в excel
Экспорт данных из Access в книгах/листов Excel на основе многочисленных условий
у меня есть некоторые данные структурированы следующим образом:
sglAccNumber intDaysOld intRouterLocation intDaysInLocation 1638828663 614 Customer Service 05. - 61-90 Days 1955963013 348 Advertising 03. 16-45 Days 1198680816 1678 Accounting 09. 401-730 Days 1892708307 1860 Accounting 010. 730+ Days 1785581943 1005 Asset Management 02. 6-15 Days 1942406908 1853 Finances 09. 401-730 Daysи т.д ... Есть 60000 строк данных.
Я ищу, чтобы переместить данные из таблицы Access в различные книги, основанные на имени intRouterLocation. Бит, с которым я борюсь, в каждой отдельной книге также перемещает данные на рабочий лист с именем intDaysInLocation.
Например, используя данные выше, Счетная книга будет иметь два листа, сгенерированные, один для 09. 401-730 дней и один для 010. 730+ дней и соответствующие записи будут заполняющими каждым.
я боролся с этим в течение последних нескольких дней и может получить данные, чтобы идти в либо в книгах по имени, или intDaysInLocation по значению, но комбинируя их как попадающая лучше меня.
Возможно ли это с помощью VBA?
код я использую для сопоставления листов только (все в одном листе, то intRouterLocation не учитывается):
Sub exportMk2() Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim rs As DAO.Recordset Dim strPath As String Dim strSelectOneType As String Dim strSelectDaysInLocation As String ' (change strPath back to what you need) strPath = CurrentProject.Path & Chr(92) & "Pets_dataset_export_" & _ Format(Date, "yyyy-mm-dd") & ".xlsx" strSelectDaysInLocation = "SELECT DISTINCT p.intDaysInLocation" & vbCrLf & _ "FROM Worksheet AS p;" Set db = CurrentDb Set rs = db.OpenRecordset(strSelectDaysInLocation, dbOpenSnapshot) Set rsRouters = db.OpenRecordset(strSelectDaysInLocation, dbOpenSnapshot) For Each routerLocation In rsRouters Do While Not rs.EOF strSelectOneType = "SELECT p.ID, p.intDaysInLocation, p.intRouterLocation" & vbCrLf & _ "FROM Worksheet AS p" & vbCrLf & _ "WHERE p.intDaysInLocation='" & rs!intDaysInLocation.Value & "';" Debug.Print strSelectOneType Set qdf = db.QueryDefs("qryExportMe") qdf.SQL = strSelectOneType qdf.Close DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ "qryExportMe", strPath, True, "woot " & rs!intDaysInLocation.Value rs.MoveNext Loop Next rs.Close End Substackoverrun.com
Как автоматизировать экспорт из Access 2007 в Excel 2003
Я хочу автоматизировать экспорт результатов запроса Access в Excel. Моя среда:
- Access 2007
- база данных в формате Access 2003
- Экспорт должен быть в Excel формат 2003.
Запрос содержит столбец Memo, который может содержать до 512 символов.
До сих пор я попытался следующие:
Выполнить запрос в Access, а затем копировать/вставить результат сетки в Excel. Это прекрасно работает, но требует ручного шага.
Выполнить некоторые VBA код, который экспортирует запрос, используя DoCmd.TransferSpreadsheet следующим образом:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "MyQuery", "MyFile.xls"
У меня есть проблема в том, что код VBA обрезает столбец Memo до 255 символов.
Какой простой способ программно экспортировать в Excel без этого усечения?
В идеале я хочу «нажимать» данные из Access в Excel, а не наоборот, то есть я не пытался использовать «Импорт внешних данных» из Excel.
Редактировать
В ответ на замечания и ответ до сих пор:
Вы можете экспортировать таблицу, содержащую поле мемо?
Я не пробовал экспортировать стол, так как возможность сделать это мне все равно не поможет.
... одна из вещей, которые отсекают памятки, как сортировка по нему
Запрос делает содержать предложения ORDER BY, поэтому результаты является отсортированными (и должно быть отсортировано). Но он не сортируется в колонке заметки.
Этого можно избежать, обработав записку чем-то вроде Left (MyMemo, 4096).
Столбец в запросе уже обработан и усечен до 512 символов, используя что-то вроде «Left (Replace (MemoColumn,« ... »,« ... »), 512)». Поэтому использование Left (...), похоже, не помогает.
Try автоматизацию с помощью функции CopyFromRecordset
Я попытался с помощью Excel автоматизации с Range.CopyFromRecordSet. В этом случае более длинные поля Memo не усекаются, а вместо этого экспортируются с некоторыми символами мусора в конце.
excel ms-access export-to-excel 4,730
stackoverrun.com
Экспорт из Access в Excel
Вопрос: Сохранение excel листа в книгу
Здравствуйте.Не получается решить следующую задачу.
Задача. Есть шаблон, хранимый в файле excel. В access этот шаблон открывается, заполняется, после чего, его нужно выгрузить в готовую существующую книгу.
Решаю так.1. Открываю шаблон.
Set xlApp = CreateObject("Excel.Application") xlApp.WindowState = xlMaximized xlApp.Visible = True xlApp.DisplayAlerts = False xlApp.ErrorCheckingOptions.NumberAsText = False xlApp.Workbooks.Open gstrScrewSheetXlsLocal Set xlWb = xlApp.ActiveWorkbook Set xlWsSheet = xlWb.Worksheets(1) xlApp.ErrorCheckingOptions.NumberAsText = False xlWsSheet.Activate xlApp.ActiveWindow.WindowState = xlMaximized2. Открываю книгу, в которую необходимо сделать выгрузку.
Set xlApp2 = CreateObject("Excel.Application") xlApp2.WindowState = xlMaximized xlApp2.Visible = True xlApp2.DisplayAlerts = False xlApp2.ErrorCheckingOptions.NumberAsText = False xlApp2.Workbooks.Open gstrBookXlsLocal Set xlWb2 = xlApp.ActiveWorkbook xlApp.ErrorCheckingOptions.NumberAsText = False xlApp2.ActiveWindow.WindowState = xlMaximized 3. Пытаюсь сохранить шаблон в открытую книгу. xlApp.Sheets(1).Select xlApp.Selection.Copy Before:=xlApp1.Workbooks(gstrBookXls).Sheets(1)Попытка выгрузить "вручную" показывает, что открытые программно excel-файлы не "видят" друг друга. Т.е., если на ярлыке выгружаемого листа выбрать переместить/скопировать, то в "Переместить выбранные листы в книгу" не будет видна вторая книга. Если здесь же открыть один из уже открытых файлов "вручную", то он становится видим другими файлами.
Как можно сделать файлы взаимно видимыми, или, подскажите, пожалуйста как можно решить предложенную задачу.
export - Экспорт результатов запроса кросс-таблицы в Excel из MS Access
Если вы хотите использовать небольшую vba, а не придерживаться исключительно макросов, вам может помочь следующее. Этот модуль принимает любой sql, который вы выбрасываете, и экспортирует его в определенное место на листе excel. После того, как модуль использует два примера, можно создать совершенно новую книгу, которая открывает существующую. Если вы не уверены в том, что используете SQL, просто создайте требуемый запрос, сохраните его и затем поставьте "SELECT * FROM [YourQueryName]" в Sub как параметр QueryString.
Sub OutputQuery(ws As excel.Worksheet, CellRef As String, QueryString As String, Optional Transpose As Boolean = False) Dim q As New ADODB.Recordset Dim i, j As Integer i = 1 q.Open QueryString, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly If Transpose Then For j = 0 To q.Fields.Count - 1 ws.Range(CellRef).Offset(j, 0).Value = q(j).Name If InStr(1, q(j).Name, "Date") > 0 Or InStr(1, q(j).Name, "DOB") > 0 Then ws.Range(CellRef).Offset(j, 0).EntireRow.NumberFormat = "dd/mm/yyyy" End If Next Do Until q.EOF For j = 0 To q.Fields.Count - 1 ws.Range(CellRef).Offset(j, i).Value = q(j) Next i = i + 1 q.MoveNext Loop Else For j = 0 To q.Fields.Count - 1 ws.Range(CellRef).Offset(0, j).Value = q(j).Name If InStr(1, q(j).Name, "Date") > 0 Or InStr(1, q(j).Name, "DOB") > 0 Then ws.Range(CellRef).Offset(0, j).EntireColumn.NumberFormat = "dd/mm/yyyy" End If Next Do Until q.EOF For j = 0 To q.Fields.Count - 1 ws.Range(CellRef).Offset(i, j).Value = q(j) Next i = i + 1 q.MoveNext Loop End If q.Close End SubПример 2:
Sub Example2() Dim ex As excel.Application Dim wb As excel.Workbook Dim ws As excel.Worksheet 'Create workbook Set ex = CreateObject("Excel.Application") ex.Visible = True Set wb = ex.Workbooks.Open("H:\Book1.xls") Set ws = wb.Sheets("DataSheet") OutputQuery ws, "E11", "Select * From [TestQuery]" End SubНадеюсь, что некоторые из вас будут полезны.