Открыть поврежденный файл Excel в VBScript - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь преобразовать около 600 файлов Excel из каталога в CSV, чтобы они были в стандартном формате для руководства SAS Enterprise.

Для этого у меня есть пакетный файл, который выполняет VBScript для каждого файла .xlsx в каталоге. Это работает почти для всех файлов Excel, за исключением файлов, которые «повреждены».

Я не уверен, почему они повреждены, но все они были преобразованы из Google Sheets в Excel, поэтому это не удивительно.

Моя проблема в том, что синтаксис, который должен заставить метод workbooks.open () открывать поврежденный файл, не работает.

Пожалуйста, смотрите мой код VBS ниже:

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open ("Z:\ATR_Track\0108~ASHFORD TP~AT-ATv2~18-06-2018.xlsx", CorruptLoad:= xlRepairFile)

oBook.Sheets(WScript.Arguments.Item(0)).Select

set deleterange = oExcel.Range("A1", "A3").EntireRow

deleterange.AutoFilter()

deleterange.Delete

oBook.SaveAs "Z:\ATR_Track\test.csv" &"_ATR", 
csv_format

oBook.Close False
oExcel.Quit

Возвращаемая ошибка гласит «Ожидаемый») в строке 9, символ 129.

Может кто-нибудь сказать мне, что не так с моим синтаксисом?

1 Ответ

0 голосов
/ 04 июля 2018

Здесь есть несколько проблем.

Во-первых, вам нужно определить константу xlRepairFile, вы можете сделать это, добавив следующую строку вверху вашего кода (ссылка на значения [https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlcorruptload-enumeration-excel]):

CONST xlRepairFile = 1

Во-вторых, VBScript не поддерживает именованные аргументы. Вам нужно будет предоставить пустые параметры, ограниченные запятыми, чтобы завершить функцию (вплоть до аргумента, который вы хотите изменить, который в данном случае оказывается последним), например, ниже (ссылка на метод WorkBooks.Open, который подробности все аргументы [https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbooks-open-method-excel]:

Set oBook = oExcel.Workbooks.Open ("Z:\ATR_Track\0108~ASHFORD TP~AT-ATv2~18-06-2018.xlsx", , , , , , , , , , , , , , xlRepairFile)


В настоящее время я не знаю, как это обойти, однако Ангус W может знать + дать лучший ответ.

Полный новый код:

csv_format = 6
CONST xlRepairFile = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open ("Z:\ATR_Track\0108~ASHFORD TP~AT-ATv2~18-06-2018.xlsx", , , , , , , , , , , , , , xlRepairFile)

oBook.Sheets(WScript.Arguments.Item(0)).Select

set deleterange = oExcel.Range("A1", "A3").EntireRow

deleterange.AutoFilter()

deleterange.Delete

oBook.SaveAs "Z:\ATR_Track\test.csv" &"_ATR", 
csv_format

oBook.Close False
oExcel.Quit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...