@ AnsgarWiechers прав, ImportExcel мощный и не сложный в использовании. Однако для вашего конкретного случая вы можете использовать более ограниченный подход, используя OleDb (или ODBC или ADO) для записи в файл Excel, например, в базу данных. Вот пример кода, показывающий, как записать в файл Excel с помощью OleDb.
$provider = 'Microsoft.ACE.OLEDB.12.0'
$dataSource = 'C:\users\user\OleDb.xlsb'
$connStr = "Provider=$provider;Data Source=$dataSource;Extended Properties='Excel 12.0;HDR=YES'"
$objConn = [Data.OleDb.OleDbConnection]::new($connStr)
$objConn.Open()
$cmd = $objConn.CreateCommand()
$sheetName = 'Demo'
$cmd.CommandText = 'CREATE TABLE $sheetName (Name TEXT,Age NUMBER)'
$cmd.ExecuteNonQuery()
$cmd.CommandText = "INSERT INTO demo (Name,Age) VALUES ('Adam', 20)"
$cmd.ExecuteNonQuery()
$cmd.CommandText = "INSERT INTO demo (Name,Age) VALUES ('Bob',30)"
$cmd.ExecuteNonQuery()
$cmd.Dispose()
$objConn.Close()
$objConn.Dispose()
Вы не сказали много о файлах CSV, которые вы будете обрабатывать. Если данные столбца изменяются, для создания таблицы вам необходимо получить имена атрибутов (столбцов) из заголовка CSV (либо путем чтения первой строки файла CSV, либо путем перечисления свойств первого элемента, возвращаемого функцией Import- CSV).
Если ваши CSV-файлы содержат большое количество строк, запись по одной строке может быть медленной. В этом случае использование DataSet и OleDbDataAdapter может улучшить производительность (но я не проверял). Но в этот момент вы также можете использовать OleDb для чтения .csv непосредственно в DataSet, создать OleDbDataAdapter, установить свойство InsertCommand адаптера и, наконец, вызвать метод Update адаптеров. У меня нет времени писать и проверять все это.
Это не полное решение, просто демонстрация того, как использовать OleDb для записи в файл Excel.
Примечание: Я проверил это на сервере, на котором не было установлено Office или Excel. Поставщики данных Office, предварительно установленные на этом компьютере, были 32-разрядными, но я использовал 64-разрядную версию PowerShell. Чтобы получить 64-разрядные драйверы, я установил распространяемый Microsoft Access Database Engine 2016 , и это то, что я использовал для тестирования.