#powershell #csv #ms-access
#powershell #csv #ms-access
Вопрос:
Я пытаюсь преобразовать некоторые файлы Excel (.xlsx) и Access (.accdb) в CSV.
Я быстро нашел способ сделать это с помощью Excel, но теперь я не могу найти никакой полезной документации по преобразованию файлов .accdb.
Пока у меня есть:
$adOpenStatic = 3
$adLockOptimistic = 3
$objConnection = New-Object -com "ADODB.Connection"
$objRecordSet = New-Object -com "ADODB.Recordset"
$objConnection.Open("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " $Filepath)
$objRecordset.Open("Select * From TableName",$objConnection,$adOpenStatic, $adLockOptimistic)
#Here I need some way to either saveas .csv or loop through
#each row and pass to csv.
$objRecordSet.Close()
$objConnection.Close()
Есть идеи?
Я был бы готов сделать это с другим языком (VB, Java, PHP), если кто-нибудь знает способ.
Ответ №1:
Если вы используете .Гораздо проще использовать NET, а не COM. Вот некоторый код для обработки файлов Excel XLSX
#Even /w Excel 2010 installed, needed to install ACE:
#http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16damp;displaylang=en
#Becareful about executing in "right" version x86 vs. x64
#Change these settings as needed
$filepath = 'C:Usersu00Documentsbackupset.xlsx'
#Comment/Uncomment connection string based on version
#Connection String for Excel 2007:
$connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=YES`";"
#Connection String for Excel 2003:
#$connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=`"$filepath`";Extended Properties=`"Excel 8.0;HDR=Yes;IMEX=1`";"
$qry = 'select * from [backupset$]'
$conn = new-object System.Data.OleDb.OleDbConnection($connString)
$conn.open()
$cmd = new-object System.Data.OleDb.OleDbCommand($qry,$conn)
$da = new-object System.Data.OleDb.OleDbDataAdapter($cmd)
$dt = new-object System.Data.dataTable
[void]$da.fill($dt)
$conn.close()
$dt | export-csv ./test.csv -NoTypeInformation
Комментарии:
1. У меня уже есть очень простой способ преобразования Excel в CSV с использованием свойства «Excel.saveas» объекта Excel. Может ли это также обрабатывать объекты доступа? (.accdb или .mdb)?
2. Да — просто измените строку подключения и запрос. MS Access также использует поставщика ACE. Смотрите ссылку на формат строки подключения MS Access: connectionstrings.com/access-2007
Ответ №2:
Если вы хотите использовать COM-объект ADODB:
# loop through all records - do work on each record to convert it to CSV
$objRecordset.Open("Select * FROM Tablename", $objConnection,$adOpenStatic,$adLockOptimistic)
$objRecordset.MoveFirst()
do {
# do your work to get each field and convert this item to CSV
# fields available thru: $objRecordset.Fields['fieldname'].Value
$objRecordset.MoveNext()
} while ($objRecordset.EOF -eq $false)
$objRecordset.Close()