2016-06-17 4 views
0

Относительно простой, но я не могу его обработать. Я хочу экспортировать запрос из доступа в .csv (табуляция или запятая). Когда я делаю это вручную с помощью мастера, он отлично работает. Но когда я делаю это через vba, он поставляется с тире форматирования, который выглядит как границы в таблице!Экспорт запроса доступа без форматирования

Я попробовал два метода и получил те же результаты

DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_ 
"grade.csv", True, *ExportSpec*, , acExportQualityScreen 

Я использовал его с или без «ExportSpec», которая является спецификацией я создал при экспорте вручную.

Это второй способ:

Dim testSQL As String 
Dim qd As DAO.QueryDef 

    testSQL = "SELECT * FROM Qry_Grade" 
    Set qd = db.CreateQueryDef("tmpExport", testSQL) 
    DoCmd.TransferText acExportDelim, , "tmpExport",_ 
     "C:\Users\Databoe\Documents\KidsTV\grade.csv" 
    db.QueryDefs.Delete "tmpExport" 

This is a solution Я обнаружил, что кажется излишним

И это то, что выглядит как выход:

screenshot exported query

Вы можете видите, что на самом деле он не разбивает ни один из столбцов при открытии файла в excel и что каждая вторая строка представляет собой просто строку «-», s

+0

Если вы имеете в виду, что файл напрямую «overkill», это не так. Это единственный метод, при котором у вас есть 100% контроль над выходом. И как только он создан, он просто работает с нулевыми проблемами. Настоятельно рекомендуется. – Gustav

+0

Я получаю вашу точку зрения, но учитывая, что в доступе есть мастер, который позволяет экспортировать это произведение, наверняка существует метод vba, который реплицирует это? Или я просто наивно полагаю, что MS выполнит такую ​​функцию !? –

+0

Если честно, я не могу вспомнить. Но много лет назад при создании подпрограмм экспорта для шести разных приемников со всеми типами заголовков, форматирования, специальной обработки пустых полей и т. Д., Я сдался и сам написал свои подпрограммы. Для начала нужно немного, но на самом деле это довольно просто. – Gustav

ответ

3

А как насчет DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, myQueryName, myExportFileName, True для прямого экспорта файла экспорта.

Я пробовал свои подходы, но я получаю только форматированный текст с первой попытки DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_ "grade.csv", True, *ExportSpec*, , acExportQualityScreen, который как и ожидалось, потому что это экспорт текста не csv.

С вашим вторым методом я всегда получаю превосходный результат. Возможно, у вас есть ловушка с ошибкой, которая скрывает ошибку, а первый grade.csv не перезаписывается. Используйте другое имя файла для второго метода, чтобы предотвратить это.

Найдено второй ловушки. Вы не указываете полный путь к файлу в первом методе, а во втором. Если C:\Users\Databoe\Documents\KidsTV не является вашим документом по умолчанию, у вас есть 2 grade.csv в разных папках, но вы, возможно, думаете, что у вас есть только тот, который перезаписывается.

+0

Спасибо, такого рода решена проблема. Я экспортировал как excel, как в вашем первом предложении. Затем открыли файл excel и сохранили как csv (так как мне был нужен этот формат над «acSpreadsheetTypeExcel9»). –

1

Я сам столкнулся с этой проблемой и нашел отличную работу. Он не сохраняется как .csv, но вы можете сохранить его как файл с разделителями-запятыми .txt.

  • Используйте мастер экспорта на вкладке «Внешние данные», чтобы экспортировать запрос как .txt-файл без форматирования.
  • Как только файл экспортируется, вы получаете диалоговое окно с вопросом, хотите ли вы сохранить шаги экспорта. Щелкните поле и сохраните экспорт.
  • Существует действие, доступное в мастере мастера под названием «Запуск сохраненного импорта/экспорта». Выберите это действие и выберите сохраненный экспорт из выпадающего меню.