Файлы Excel не могут быть прочитаны без ссылки на сборку.Вам нужны файлы DocumentFormat.OpenXml.dll
и oh22is.Analytics.Formats.dll
в вашем каталоге озера данных вместе с файлом Excel (не обязательно в той же папке).
Ссылки на сборки содержат логику чтения файлов и действуют как шлюз междувнутреннее представление данных в u-sql и формат файла, позволяющий обработать данные, как они могут быть обработаны.
К сожалению, насколько я знаю, эти файлы не распространяются по отдельности, и Microsoft, похоже, требует, чтобы вы компилировали их вручную из источника с в этом хранилище с Visual Studio.Хорошая вещь об использовании VS заключается в том, что вы можете ссылаться на сборки напрямую, чтобы ускорить разработку (но я нахожу это бессмысленным, так как я использую его только для извлечения Excel и должен генерировать файлы только один раз).Процесс компиляции также должен предоставить вам динамически связанную библиотеку из пакета documentformat.openxml
, чтобы вам не приходилось загружать ее или извлекать из файла .nupkg
, что, если вы это сделаете,предпочитаю использовать версию на /lib/net40/DocumentFormat.OpenXml.dll
, что сработало для моего файла xlsx (формат 2007-2019).
После помещения файлов сборки (двух файлов .dll
) в озеро данных сделайте заметкуих пути и использовать их как следующий скрипт u-sql:
// Register the dependency to the analytics assembly (xml file reader)
DROP ASSEMBLY IF EXISTS openxml;
CREATE ASSEMBLY openxml FROM @"/MyProject/Assemblies/DocumentFormat.OpenXml.dll";
REFERENCE ASSEMBLY openxml;
// Register the analytics assembly that read our excel file
DROP ASSEMBLY IF EXISTS analytics;
CREATE ASSEMBLY analytics FROM @"/MyProject/Assemblies/oh22is.Analytics.Formats.dll";
REFERENCE ASSEMBLY analytics;
// Define a local variable for the excel file
DECLARE @ExcelFile = @"/MyProject/MyFolder/test-file.xlsx";
@sheet = EXTRACT
A string,
B string,
C string
FROM @ExcelFile
USING new oh22is.Analytics.Formats.ExcelExtractor("Sheet1");
//And you can save, transform, select it like you would use any other data:
OUTPUT (SELECT * FROM @sheet) TO "/MyProject/output.csv" USING Outputters.Csv();