Обрезать имена столбцов таблицы excel в приложении Azure logic

#azure #azure-logic-apps #office-scripts

#лазурь #azure-логика-приложения #офисные сценарии

Вопрос:

У нас есть приложение логики Azure, которое считывает файл excelfile из sharepoint и вставляет строки в базу данных sql. Иногда имена столбцов в файле excel содержат начальные и/или конечные пробелы, что приводит к ошибке вставки, поскольку имена столбцов в действии Вставить строку не совпадают с именами столбцов в файле. Как лучше всего удалить начальные и конечные пробелы из имен столбцов в приложении логики Azure? введите описание изображения здесь

Комментарии:

1. Я думаю, что вы могли бы использовать формулу обрезки excel, чтобы выполнить некоторую очистку перед вставкой. Одна из идей состоит в том, чтобы использовать офисный скрипт для создания нового рабочего листа с заполненным диапазоном для заголовка — например, на новом листе в A1 поместите эту формулу =ОБРЕЗАТЬ(Лист1!A1:Z1). Сделайте что-то подобное для оставшихся данных, а затем извлеките их из нового рабочего листа. Сработает ли что-то подобное? Вы надеетесь сохранить очистку/обрезку текста в приложении логики?

2. @Джеффри Да, это звучит как хорошее решение, я надеялся сделать это в приложении логики. Я попытался добавить действие сценария запуска Excel, но не понимаю, как написать сценарий, в раскрывающемся списке нет доступных сценариев, и когда я пытаюсь ввести какой-либо сценарий в текстовое поле сценария, я получаю: Код ошибки: «Плохой запрос», сообщение: «Не удается проанализировать ссылку на сценарий» (хотя сценарий является допустимым офисным сценарием, я нашел несколько примеров в Интернете). Должен ли я каким-то образом добавить скрипт в файл, чтобы найти его в раскрывающемся списке? Что касается вопросов, я новичок в приложениях логики и офисных сценариях…

3. сначала вам нужно будет создать офисный скрипт в Excel для Интернета. После его создания он должен быть доступен для выбора в действии сценария запуска Excel в раскрывающемся списке.

Ответ №1:

Одним из обходных путей является то, что вы можете использовать replace выражение, взяв переменную name в compose соединителе. Вот мой рабочий процесс —

введите описание изображения здесь

Я использую приведенное ниже динамическое выражение для замены пробела

 replace(variables('Name'),' ','')  

выход:

введите описание изображения здесь

Комментарии:

1. Спасибо вам за ваш ответ! Но мне интересно, содержит ли переменная name содержимое ячеек или это имена заголовков? Потому что наша проблема связана только с заголовками (и с тем, как получить доступ к именам заголовков в приложении логики). В идеале мы хотели бы обрезать/заменить только имена заголовков. В вашем примере переменная Name содержит только имена заголовков и как вы устанавливаете эту переменную?

2. Переменная Name содержит все значения столбца Name

3. Чтобы задать переменную, вам нужно инициализировать переменную, используя Initialize variable соединитель с его именем, указав тип данных этого столбца, а затем используя set variable сопоставление соединителя с заголовком столбца, с которым мы хотим выполнять операции.

4. Если мой ответ вам помог, вы можете принять его в качестве ответа (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполнение). Это может быть полезно для других членов сообщества. Спасибо

Ответ №2:

Вместо использования встроенной замены вы можете добавить шаг потока, который извлекает данные из Excel с помощью офисного сценария. Сценарий Office может получить диапазон/таблицу и выполнить очистку только заголовков, а затем вернуть результат на следующий шаг в потоке. Вы можете подходить к деталям так творчески, как вам нужно:

введите описание изображения здесь

 function main(workbook: ExcelScript.Workbook) {  const table = workbook.getTable("DemoTable");  const headersAndValues = table.getRange().getValues();  cleanup(headersAndValues[0] as string[]);  console.log(JSON.stringify(headersAndValues));  return headersAndValues; }  function cleanup(data: string[]): string[] {  data.forEach((val, index) =gt; {  data[index] = val.trim();  }) }  

введите описание изображения здесь