2012-04-10 139 views

答えて

-1

ないこれらのモジュールわからしかしuは、私はちょうどこれに対処し、これは一般的に良いコーディングの選択肢はありませんが、あなたがアクセスしてセットするために内部ワークブック _worksheetsを使用することができます

from win32com import client 
def delete(self, number = 1): 
    """ 
    (if the sheet is the first use 1. -1 to use real number) 
    example: r.delete(1) 
    """ 
    sheetnumber = int(number) - 1 
3

をWIN32試すことができますワークブックオブジェクトのワークシート。

write_book._Workbook__worksheets = [write_book._Workbook__worksheets[0]] 

これは、私はちょうど私がダビデが与えた答えを使用して動作するようにこれを得ていることを確認したかったワークブック

1

に関連付けられた最初のワークシート以外のすべてを取り除くでしょう。ここでは、自分のワークブックに分割する必要がある40枚以上のスプレッドシート(​​ワークブック)がある場所の例を示します。私は、マスターワークブックは、すべてが、1枚のシートを取り外し、新しいスプレッドシートに保存されたコピー:

from xlrd import open_workbook 
from xlutils import copy 

workbook = open_workbook(filepath) 

# Process each sheet 
for sheet in workbook.sheets(): 
    # Make a copy of the master worksheet 
    new_workbook = copy.copy(workbook) 

    # for each time we copy the master workbook, remove all sheets except 
    # for the curren sheet (as defined by sheet.name) 
    new_workbook._Workbook__worksheets = [ worksheet for worksheet in new_workbook._Workbook__worksheets if worksheet.name == sheet.name ] 

    # Save the new_workbook based on sheet.name 
    new_workbook.save('{}_workbook.xls'.format(sheet.name)) 
1

以下の方法はあなたが必要なものを行います。

def deleteAllSheetBut(workingFolder, xlsxFILE, sheetNumberNotToDelete=1): 
import win32com.client as win32 
import os 
excel = win32.gencache.EnsureDispatch('Excel.Application') 
excel.Visible = False 
excel.DisplayAlerts = False 
wb = excel.Workbooks.Open(os.path.join(workingFolder, xlsxFILE)) 
for i in range(1, wb.Worksheets.Count): 
    if i != sheetNumberNotToDelete: 
     wb.Worksheets(i).Delete() 
wb.Save() 
excel.DisplayAlerts = True 
excel.Application.Quit() 
return 
関連する問題