如何根据不同的条件将数据写入多张单个工作簿?

时间:2017-04-17 04:00:36

标签: python excel pandas xlsxwriter

我试图将测试用例分为4类:

  1. 手册烟
  2. 手册回归
  3. 自动-烟
  4. 自动回归
  5. 我有一个python代码,它会以这种方式给我字典:

      "ABC": {
        "id1": "name1",
        "id2": "name2",
        "id3": "name3"
      }
    

    我使用xlsxwriter编写了以下代码,但这会遍历所有工作表,但它只保存最后一次。在我的excel WB中,我只得到最后一张。

    def createExcelSheetTC(self,testcase):
        workbook=xlsxwriter.Workbook('data.xlsx')
        self.format_excelWB(workbook)
        with xlsxwriter.Workbook('data.xlsx') as workbook:
            self.format_excelWB(workbook) ##Initialize formatting of WB
            if testcase == self.manualSmoke:
                ws_manualSmoke=workbook.add_worksheet('Manual-Smoke Cases')
                self.writeTCExcel(testcase,ws_manualSmoke)
            elif testcase == self.manualRegression:
                ws_manualRegression=workbook.add_worksheet('Manual-Regression Cases')
                self.writeTCExcel(testcase,ws_manualRegression)
            elif testcase == self.automatedSmoke:
                ws_autoSmoke=workbook.add_worksheet('Automated-Smoke Cases')
                self.writeTCExcel(testcase,ws_autoSmoke)
            elif testcase == self.automatedRegression:
                ws_autoRegression=workbook.add_worksheet('Automated-Regression Cases')
                self.writeTCExcel(testcase,ws_autoRegression)
        workbook.close()
    
    def writeTCExcel(self,tc,worksheet):
        ##Logic to write testcase in EXCEL
        ## This is correct as per requirements
    
    
    self.manualSmoke=self.get_test_cases(args*)
    self.createExcelSheetTC(testcase=self.manualSmoke)
    
    self.manualRegression=self.get_test_cases(args*)
    self.createExcelSheetTC(testcase=self.manualRegression)   
    
    self.automatedSmoke=self.get_test_cases(args*)
    self.createExcelSheetTC(testcase=self.automatedSmoke)
    
    self.automatedRegression=self.get_test_cases(args*)
    self.createExcelSheetTC(testcase=self.automatedRegression)
    

    使用上面的代码,我得到了'自动回归' 的情况,但没有得到其他情况。看起来它只能在最后一次保存&覆盖所有其他写作。

2 个答案:

答案 0 :(得分:2)

您在每次拨打xlsx时都会覆盖def createExcelSheetTC,因此您只会看到最后一次。

将这些内容移到def createExcelSheetTC之外,并将其称为 一次。

workbook=xlsxwriter.Workbook('data.xlsx')
self.format_excelWB(workbook)
...
workbook.close()

答案 1 :(得分:1)

使用以下方法解决了这个问题。

import xlsxwriter
d1 = {
      "ABC": {
    "key1": "val1",
    "key2": "val2",
    "key3": "val3"
  },
   "XYZ": {
    "key4": "val4",
    "key5": "val5",
    "key6": "val6"
  }
}
d2= {  "MNO": {
    "key7": "val7",
    "key8": "val8",
    "key9": "val9"
  }
}


def create_xls_writer(tc):
    workbook=xlsxwriter.Workbook('xlsxwriter.xlsx')
    print tc
    ws1=workbook.add_worksheet('abc')
    ws2=workbook.add_worksheet('xyz')

    worksheet = [ws1,ws2]

    for each_tc in tc:
        if each_tc==d1:
            writeTCEXcel(each_tc,ws1)
        elif each_tc==d2:
            writeTCEXcel(each_tc,ws2)

    workbook.close()

def writeTCEXcel(something,worksheet):
##Logic to write **Something**  in EXCEL



create_xls_writer([d1,d2])