XLSX 형식의 28KB 크기의 작은 Excel 파일이 있는데 PowerShell로 수정하고 싶습니다. 이 파일에는 59 개의 행과 366 개의 열이 있습니다.Powershell을 사용하여 Excel 파일을 읽는 것이 왜 그렇게 느립니다?
내 코드는 첫 번째 열을 탐색하고 특정 항목을 검색 한 다음 찾은 열을 탐색하고 발견 된 행과 주먹의 내용을 출력합니다. 이것은 코드입니다 :
# Define some parameters.
$year = "2015"
$filename = "C:\...\file.xlsx"
$person = "Lastname, Firstname"
# Open Excel file and select worksheet.
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Open($filename)
$worksheet = $workbook.sheets.item($year)
$cells = $worksheet.cells
# Search person name in first column.
$rows = $worksheet.UsedRange.Rows.count
"Rows: $rows"
$row = 1
while ($row -le $rows)
{
$cell = $cells.item($row,1).value2
if ($person -eq $cell) {
break
}
$row++
}
# List row
$cols = $worksheet.UsedRange.Columns.count
"Cols: $cols"
foreach ($col in 2..$cols)
{
$date = $cells.item(1,$col).value2
$data = $cells.item($row,$col).value2
$date = [DateTime]::FromOADate($date)
$msg = $date.ToString("yyyy-MM-dd") + " " + $data
"$msg"
}
# Close workbook and Excel file and release COM object.
$workbook.close()
$excel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
내 문제 : 프로그램이 끔찍합니다. 366 열을 반복하는 데 5 분 이상 걸립니다!
PS C:\...> Measure-Command { .\program.ps1 } Days : 0 Hours : 0 Minutes : 5 Seconds : 33 Milliseconds : 580 Ticks : 3335806616 TotalDays : 0,00386088728703704 TotalHours : 0,0926612948888889 TotalMinutes : 5,55967769333333 TotalSeconds : 333,5806616 TotalMilliseconds : 333580,6616
나는 이것이 거의 믿을 수 없다. 대신 내 프로그램에는 뭔가 잘못된 것이 있다고 생각합니다. 그러나 나는 그것이 무엇인지 전혀 모른다.
더 빨리 바꾸려면 어떻게해야합니까?
Excel에서이 작업을 수행해야합니까? 데이터를 조작하기 위해 프로그래밍 방식으로 데이터를 CSV로 변환 할 수 있습니다. 이것은 왜 느린지에 대한 대답이 아닙니다. – Matt
@Matt Excel 파일은 많은 장식과 많은 기능을 가지고 있으며,이 정보를 보존하는 데 많은 도움이 될 것 같습니다. 이것이 펄 파일을 처음부터 새로 만들어야하는 펄 솔루션을 폐지 한 이유이다. 엑셀 파일을 읽는 펄 모듈과 엑셀 파일을 작성하는 펄 모듈이 존재하지만 Excel 파일을 업데이트하는 펄 모듈이 없기 때문이다. – ceving
나는 Excel 파일을 잃어버린 것이 아닙니다. csv 복사본으로 작업하십시오. 우리는 프로그래밍 방식으로 그렇게 할 수 있습니다. 탁월한 변화는 없습니다. 변경 사항을 쿼리 데이터로 저장하는 것으로 표시되지 않습니다. – Matt