python実装excel回転json

4021 ワード

前言
作業項目では、協力者がExcelのデータシートを提供し、それをJsonファイルに変換する必要があり、ちょうど最近pythonを勉強したので、pythonで試水して、この機能を実現することにしました.
作業環境
  • python 3.6
  • pythonのExcelに対する操作は、xlrd、xlwtの2つのモジュールに依存する必要があり、xlrdはExcelを読むモジュールであり、xlwtはExcelを書くモジュール
  • である.
  • pip install xlrd
  • pip install xlwt

  • Excel表を手に取ってよく見ると、表の中には1列のデータがほとんどないことに気づきましたが、この列はまた重要な1つで、内容が別の列のデータに含まれているので、まずExcel表をpythonで書き直すことにしたので、xlwtパッケージも入れて、Excelファイルを読むだけならxlrdだけで十分です.
    xlrd
    Excelファイルを開いてデータを読み込む
    data = xlrd.open_workbook(file_path)    #     xlrd.book.Book  
    

    bookのワークシートを取得
    table = data.sheets()[0]                    #        ,  xlrd.sheet.Sheet  
    table = data.sheet_by_index(sheet_indx))    #        ,  xlrd.sheet.Sheet  
    table = data.sheet_by_name(sheet_name)      #      ,  xlrd.sheet.Sheet  
    

    book内のすべてのシートの名前を取得
     names = data.sheet_names()    #  book           list
    

    sheetの有効なロー数を取得
    nrows = table.nrows
    

    行のすべてのセル・オブジェクトからなるコレクションリストを取得
    table.row(rowx)     #          
    

    行のすべてのセルデータからなる集合リストを取得
    table.row_values(rowx, start_colx=0, end_colx=None)
    

    xlwt
    新規excelファイル
    file = xlwt.Workbook(encoding="utf-8")  #    ascii
    

    新規sheetテーブル
    table = file.add_sheet(sheet_name, cell_overwrite_ok=False) #  xlwt.Worksheet.Worksheet  ,              ,    cell_overwrite_ok=True
    

    x行y列にデータvalueを書き込む
    table.write(x, y, value)
    

    ファイルの保存
    file.save(file_name)
    

    Excelテーブルへのデータの追加
    def completion_excel():
        file_path = input("       Excel       >>>")
        data = achieve_data(file_path)
        if data is not None:
            worksheets = data.sheet_names()
            print("     :")
            for index, sheet in enumerate(worksheets):
                print(index, sheet)
            choose = input("          >>>")
            table = data.sheet_by_index(int(choose))
    
            #   Excel 
            workbook = xlwt.Workbook(encoding="utf-8")
            #    sheet
            worksheet = workbook.add_sheet("sheet1")
            #     
            titles = table.row_values(0)
            for k, v in enumerate(titles):
                worksheet.write(0, k, v)
            for i in range(1, table.nrows):
                row = table.row_values(i)
                #       
                if row[4] == "":
                    course = row[6]
                    if "  " in course:
                        n = course.index("  ")
                        row[4] = course[n-1:n+3]
                    else:
                        row[4] = "  "
    
                for x, y in enumerate(row):
                    worksheet.write(i, x, y)
            workbook.save("Excel_test.xls")
    

    新しいExcelファイルをJsonに変換
    def excel2json():
        file_path = input("      Json Excel     >>>")
        data = achieve_data(file_path)
        if data is not None:
            #     sheet    
            worksheets = data.sheet_names()
            print("     :")
            for index, sheet in enumerate(worksheets):
                print(index, sheet)
            choose = input("          >>>")
            table = data.sheet_by_index(int(choose))
            #         
            titles = table.row_values(0)
            result = {}
            result["middle_school"] = []
            # excel     10196  ,   10196   
            for i in range(1, table.nrows):
                row = table.row_values(i)
                tmp = {}
                for index, title in enumerate(titles):
                    if title == "id":
                        tmp[title] = int(row[index])
                    else:
                        tmp[title] = row[index]
                result["middle_school"].append(tmp)
            with open("middle_school.txt", 'w', encoding='utf-8') as f:
                json.dump(result, f)
    

    フルコードアドレス