Вроде бы нашел решение проблемы. Можно обращаться к бинарникам и не ловить при этом ошибки о некорректном формате. Для этого придется использовать функцию
Binary.Buffer(). Как это выглядит? При создании запроса к файлу автоматически генерится код вида
Код |
---|
= Excel.Workbook( File.Contents("C:\Folder\file.xlsb" ), null, true) |
Так вот его нужно переделать так:
Код |
---|
= Excel.Workbook( Binary.Buffer( File.Contents("C:\Folder\file.xlsb" ) ), null, true ) |
В таком случае все содержимое файла уедет в память и дальнейшее обращение функции Excel.Workbook будет происходить именно с памятью, а не с диском. Таким образом мы избегаем конфликта этой функции, которая пытается сделать предпросмотр данных через коннектор ACE.oledb, который к этому не очень предрасположен. Т.е. сначала коннектор полностью грузит содержимое файла в память, и только потом уже PQ лезет в память своими потными ручонками.
Проверял, схема рабочая, НО выгрузка
очень медленная. А с более-менее большими файлами работать просто мучение. Так что если уж очень надо, то пользуйтесь, но лучше все же текст или xlsx. Возможно такой же прием поможет избежать и глюков при работе с файлами формата xls, но это не проверял, так что не гарантирую.
Всех благ.