Я использовал средство записи макросов в Excel, чтобы импортировать таблицу из PDF в редактор Power Query, а затем экспортировать преобразованную таблицу в Excel.
Я хочу повторно использовать этот код для других подобных таблиц PDF, которые идентичны по структуре.
Проблема в том, что столбец «Сальдо стоимости» будет иметь другую дату в каждой таблице PDF. Я хотел бы использовать динамическую переменную для обработки обновленной даты. Конкатенация, которую я использовал с переменной «RefDate» в приведенном ниже коде, не работает:
Подмакрос1()
RefDate = "05-05-22"
ActiveWorkbook.Queries.Add Name: = "Table001 (Page 1)", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Pdf.Tables(File.Contents(""C:\Users\MyPDF.pdf""), [Implementation = ""1.3""])," & Chr(13) & "" & Chr(10) & " Table001 = Source{[Id = ""Table001""]}[Data]," & Chr(13) & "" & Chr(10) & " #""Promoted Headers"" = Table.PromoteHeaders(Table001, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""Ac" & _
"count Code"", type text}, {""Ccy"", type text}, {""Book Balance"", type number}, {""Value Balance#(lf)"" & RefDate, type number}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Changed Type"""
Конец сабвуфера
Как я могу создать динамическую строку в этом типе вложенного кода?
Спасибо!
Вы можете видеть в своем посте, что имя переменной зеленое. Это визуальный индикатор того, что он находится внутри строки. Вы должны разбить строку и объединить переменную. Сравните следующие примеры:
MyString = "The value is MyVar."
MyString = "The value is " & MyVar & "."
Строка в коде, который я представил, немного сложнее, чем я знаю, как бы вы разбили эту конкретную строку?
@ Адам, я не совсем уверен, как выглядит твой стол, но тебе нужно изменить {""Value Balance#(lf)"" & RefDate, type number}
, чтобы он больше походил на {""" & Something & RefDate & """, type number}
. Тройные кавычки, чтобы строка была закрыта, но также добавляла фактическую метку «. Вы также можете обернуть RefDate
внутри функции Format
, чтобы вы могли контролировать, как она преобразуется в строку. Например, Format(RefDate, "yyyy-MM-dd")
, чтобы убедиться, что она представлена в этой форме.
@Toddleson, немного поигравшись с компилятором codechef.com, я смог определить начало и конец родительской строки. Вы были правы, используя тройные кавычки, так как двойные кавычки в фигурных скобках должны были появиться в родительской строке: " = Table.TransformColumnTypes(#""Promoted Headers"",{{""Account Code"", type text}, {""Ccy"", type text}, {""Book Balance"", type number}, {" & """Value Balance#(lf)" & RefDate & """, type number}})"
Итак, для окончательного решения мне пришлось сделать одинарную кавычку сразу после фигурной скобки, чтобы разбить родительскую строку, а затем объединить строку, начинающуюся с двойных кавычек, затем переменную, а затем еще одну пару двойных кавычек: " PARENT STRING {" & """Value Balance#(lf)" & RefDate & """, type number}})"
Или : "PARENT STRING" & """Nested String" & Variable & """ PARENT STRING"
Возможно, вам потребуется преобразовать файл PDF в текстовый файл, а затем импортировать данные из текстового файла, и тогда... у вас будет гораздо больше контроля над процессом импорта данных. Заинтересованы ли вы в таком решении?