Форвард
В зависимости от того, что вы уже установили на вашей системе вам может понадобиться Microsoft Access Database Engine 2010 Redistributable, чтобы это решение работало. Это даст вам доступ к провайдеру: «Microsoft.ACE.OLEDB.12.0»
Отказ от ответственности: Не очень впечатлен результатом, и кто-то с большим фоном может сделать этот ответ лучше, но здесь он идет.
Код
$strFileName = "C:\temp\Book1.xls"
$strSheetName = 'Sheet1$'
$strProvider = "Provider=Microsoft.ACE.OLEDB.12.0"
$strDataSource = "Data Source = $strFileName"
$strExtend = "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"
$strQuery = "Select * from [$strSheetName]"
$objConn = New-Object System.Data.OleDb.OleDbConnection("$strProvider;$strDataSource;$strExtend")
$sqlCommand = New-Object System.Data.OleDb.OleDbCommand($strQuery)
$sqlCommand.Connection = $objConn
$objConn.open()
$da = New-Object system.Data.OleDb.OleDbDataAdapter($sqlCommand)
$dt = New-Object system.Data.datatable
[void]$da.fill($dt)
$dataReader.close()
$objConn.close()
$dt
Создать подключение ODBC к Ехчел $strFileName
. Вам нужно знать имя вашего листа и заполнить $strSheetName
, который поможет построить $strQuery
. Затем используйте несколько объектов для создания соединения и извлеките данные с листа как System.Data.DataTable
. В моем тестовом файле с одним заполненным листом у меня было два столбца данных. После запуска кода на выходе $dt
является:
letter number
------ ------
a 2
d 34
b 0
e 4
Затем можно взять эту таблицу, а затем ExportTo-CSV
$dt | Export-Csv c:\temp\data.csv -NoTypeInformation
Это была построена на основе информации, собранной из:
- Scripting Guy
- PowerShell Code Repository
Я не достаточно хорошо разбираюсь в PowerShell, чтобы предоставить полный ответ, но я думаю, что вы можете подключиться к файлу Excel в качестве источника данных Odbc, даже без установки Excel, и сбрасывать результаты запроса выбора из этого источника данных до csv. Фокус в том, что он знает имя листа (ов). Кроме того, что вы хотите сделать, если есть больше, чем рабочий лист? –
там будет только каждый лист. –
Нашел пример того, что Джоэл говорил здесь: http://www.codeproject.com/Articles/670082/Use-Excel-in-PowerShell-without-a-full-version-of и еще один http: // blogs .technet.com/b/heyscriptingguy/archive/2008/09/11/how-can-i-read-from-excel-without-use-excel.aspx – Matt