2017-06-07 6 views
0

Excelで特定の行を削除する際に問題がありましたが、現在は特定の単語を含むヘッダーを削除しています。私は意図したが、私はそれを動作させるための余裕を作った)と今は、特定のポイントを越えてExcelファイル内のすべての行を削除する必要があります、私は多くの方法を試してみて、私は本当に助けを愛するでしょう誰もが可能なヒントやソリューションを持っている場合は、以前のそれは動作しませんでした。 以下は私のコードです。Cant Delete PowershellでExcelのすべての行を削除します。

#list of columns wanted 
$want_list = ("CustomerCompanyName","InvoiceNumber","ChargeStartDate","ChargeEndDate", 
"SubscriptionId","ServiceName","ServiceType","ResourceName","Region","ConsumedQuantity", 
"IncludedQuantity","OverageQuantity","ListPrice","PretaxCharges","ChargeType","DomainName") 
$bad_list = ("PartnerId","PartnerName","PartnerBillableAccountId","MpnId","SubscriptionName", 
"SubscriptionDescription","OrderId","ResourceGuid","Sku","DetailLineItemId","TaxAmount", 
"PostTaxTotal","Currency","PretaxEffectiveRate","PostTaxEffectiveRate","CustomerId") 

$file = Read-Host "Enter Billing Info Location: example C:\Users\tyarn\Desktop\Billing_Folder\Billing_Info.csv" 
    #create new object 
    $excel = New-Object -ComObject Excel.Application 
    $excel.DisplayAlerts = $false 
    $excel.visible = $false 

    #open csv file 
    $workbook = $excel.WorkBooks.open($file) 
    $sheet = $workbook.Sheets.Item(1) 

    #get num columns 
    $num_cols = $sheet.UsedRange.Columns.Count 



    #for loop with deleting entire column if name of column isnt in list 
    For($i=1;$i -lt $num_cols;$i++){ 
     if($sheet.Cells.Item(2,$i).Text -notin $want_list){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
     if($sheet.Cells.Item(2,$i).Text -in $bad_list){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
     if($sheet.Cells.Item(2,$i).Text -eq "OrderId"){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
     if($sheet.Cells.Item(2,$i).Text -eq "Currency"){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
     if($sheet.Cells.Item(2,$i).Text -eq "PretaxEffectiveRate"){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
     if($sheet.Cells.Item(2,$i).Text -eq "PartnerId"){[void]$sheet.Cells.Item(2,$i).EntireColumn.Delete()} 
    } 
    ##Regular for loop going through and deleteing every row after a certain point doesnt work 
    #get number of rows 
    $num_rows = $sheet.UsedRange.Rows.Count 
    #doesnt work yet 
    #loop deleting unneeded rows 
    #$truth_value = 0 
    #For($i = 1; $i -lt $num_rows+1;$i++){ 
    #if($sheet.Cells.Item($i,1).Text -eq ""){ 
    #$truth_value = 1 
    #For($j = $i;$j-lt $num_rows; $j++){ 
    #[void]$sheet.Cells.Item($j,1).EntireRow.Delete()} 
    #} 
    #if($truth_value -eq 1){break} 
    #} 

    #new try 
    ##find row to start delete on 
    $row_start = $null 
    For($j=1;$j -lt $num_rows;$j++){ 
     if($sheet.Cells.Item($j,1).Text -eq "Daily Usage"){ 
      $row_start = $j 
      $start_delete = $row_start 


     } 
    } 
    ##deleting row 56 everytime cause it moves up one when its deleted? doesnt work dont think 
    #For($row_start;$row_start -lt $num_rows; $row_start++){ 
     # [void]$sheet.Cells.Item($row_start,1).EntireRow.Delete() 
     #$start_delete +=1 
    #} 

    #long solution 
    #For($i=1;$i -lt $num_cols;$i++){ 
     # For($j=$start_delete;$j -lt $num_rows;$j++){ 
      # [void]$sheet.Cells.Item($i,$j).clear() 
     # } 
    # } 
    ##GET RID OF 
    #save 
    $file_name = Read-Host "What would you like the new files name to be" 
    #must create a folder for this 
    $workbook.SaveAs("C:\Users\tyarn\desktop\New_Billing\$file_name") 

    #close and release com 
    $workbook.Close($true) 
    $excel.Quit() 
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) 
    Remove-Variable excel 

いくつかの列が削除され、何らかの理由で、まだいくつかが削除されていなかったので、私は唯一のループのために、他の削除列を含むが、それが主な問題ではありませんされているっすので、私は唯一の「悪いリスト」を含め、主な問題は、何らかのポイントの後にすべての行を削除するために何をループしようとしても、時には1つ、またはすべての行から半分の列になりますが、すべてではありません。

答えて

0

あなたはあなたの試行の一つでほぼありました。次のコードを使用し、$ START_DELETEがわかっている場合は、$ START_DELETE行からのすべての行が削除されます。これはまた、最後の行を削除します

それ -leを使用するにとって必須

For($j = $start_delete; $j -le $num_rows; $j++){ [void]$sheet.Cells.Item($start_delete,1).EntireRow.Delete() }

、。行の指示として$start_deleteを使用すると、ファイルが縮小されているため、毎回同じ行が削除されます。

+0

私はこれを試してみましたが、論理的には他のいくつかの試行と同じように動作するはずですが、実際のCSVファイルを使ってこのコードで問題が起こっているとは思えません。別のアプローチでは、特定の列をエクスポートしようとし、行を何もしなかったし、列をエクスポートしていない、私は評判の良いソースから直接コードをコピーしたので非常に奇妙だったヘッダー – Ferozi

関連する問題