2017-09-14 6 views
0

少し助けてもらえることを願っています。私は、DownTimeと題された1つのExcelワークブックからデータを取り出し、コイルが経験した "コード"と一致するコイル(製品)番号の辞書を作成しようとしています。私はこの部分を達成することができました、それはかなり簡単です。1つのExcelブックから辞書を作成し、別のブックとキーを一致させて値を貼り付けます。

私は、コイル番号を別のExcelワークブックと一致させ、対応する「コード」に貼り付ける方法です。だからここ

は、私がこれまで持っているもので、次のように

import openpyxl 
from collections import defaultdict 

DT = openpyxl.load_workbook('DownTime.xlsm') 
bl2 = DT.get_sheet_by_name('BL2') 
CS = openpyxl.load_workbook('CoilSummary.xlsm') 
line = CS.get_sheet_by_name('BL2') 
#opening needed workbooks with specific worksheets 


coil =[] 
rc = [] 
code = defaultdict(set) 
cnum = '' 
next_row = 2 
col = 32 

for row in range(2, bl2.max_row + 1): 
    coil = bl2['K' + str(row)].value 
    rc = bl2['D' + str(row)].value 
    code[coil].add(rc) 
    # Creating a dictionary that represents each coil with corresponding codes 

for key,value in code.items(): 
    cnum = line['B' + str(row)].value 
    if cnum == key: 
     line.write(next_row, col, value) 
     next_row+=1 
# Attempting to match coil numbers with dictionary and column B 
# if the key is present, paste the value in column AF  

CS.close() 
DT.close() 

辞書のサンプル出力はなります

('M30434269': {106, 107, 173}, 'M30434270': {132, 424, 106, 173, 188}, 'M30434271': {194, 426, 202, 106, 173}}) 

は約22,000のエントリがあります。だから私は達成したいものを改めて表明する

私は、私はワークブックのダウンタイムから作られたこの辞書を取るCoilSummaryの列でキーと一致し、キーは、セルエントリと一致した場合、ペーストしたいですテーブルの最後の空白のセルに値を設定します。

例:

"CoilNum"  "Date"   "Shift" "info1" "info2" "Code" 
M30322386 03/03/2017 06:48:30 3  1052  1722 ' ' 
M30322390 03/03/2017 05:18:26 3  703  1662 ' ' 

私は辞書のキーと「CoilNum」と一致し、「コード」に値をペーストしたいと思います。

私はそれを十分に説明したかったと思います。コードの助けを借りたり、参考のためにウェブサイトを指したりすると、非常に感謝しています。私はちょうど手でこれらのコードのすべてを入力する必要はありません!

ありがとうございました!

答えて

1

多くの研究と試行錯誤の末、誤ってファイルを壊してしまい、一般的にはPythonで挫折して驚異的になった後、私はそれを理解しました。ここで私が持っているものです。

# -*- coding: utf-8 -*- 

# importing tools needed for the code to work 
import pyexcel as pe 
from collections import defaultdict 
import openpyxl as op 


coil ='' 
rc = {} 
code = defaultdict(list) 
next_row = 2 
col = 33 
cnum = [] 
temp = '' 



def write_data(code,cnum): 
    ''' Used to open a given sheet in a workbook. The code will then compare values 
collected from one column in a specific sheet referred to as "coils" and compares it to a dictionary where the key's are also "coils." 
    If the coil number matches, the code will then paste the values in a new workbook. From here the values can be copied by hand and pasted into the excel file of choice.''' 
    sheet = pe.get_sheet(file_name="CoilSummaryTesting.xlsx") 
    next_row = 2 
    lst = [] 

    while next_row <= len(cnum): 
     for key in code.keys(): 
      for step in cnum: 
       if str(step) == str(key): 
        for val in code.values(): 
         temp = val 
         lst.append(temp) 
         next_row+=1 


       if step!=key: 
        break 
     break 

    for item in lst: 
     sublist = (" ").join(str(item)) 
     sheet.row+= [sublist] 
    sheet.save_as("CoilSummaryTest.xlsx") 
    print("\nCoils Compared: ",next_row)    



def open_downtime(): 
    ''' Pull data from a second excel file to obtain the coil numbers with corresponding downtime codes''' 

    DT = op.load_workbook('DownTime.xlsm') 
    bl2 = DT.get_sheet_by_name('BL2') 
    n = 1 

    for row in bl2.iter_cols(min_col=11,max_col=11): 
     for colD in row: 
      code[colD.offset(row=1,column=0).value].append(colD.offset(row=1,column=-7).value 
     n+=1 
    print('\nNumber of rows in DownTime file: ',n) 
    return code 

def open_coil(): 
    '''Opens the first workbook and sheet to know how many rows are needed for coil comparision.''' 

    i = 1 
    CSR = op.load_workbook('CoilSummaryTesting.xlsx') 
    line_read = CSR.get_sheet_by_name('BL2') 


    for rows in line_read.iter_cols(min_col=2, max_col=2): 
     for col in rows: 

      cnum.append(col.offset(row=1,column=0).value) 
      i+=1 

    print('\nNumber of rows in CoilSummary file: ',i)  



    return write_data(open_downtime(),cnum) 


def main(): 
    sheet = open_coil() 



if __name__ == "__main__": 
    main() 

私はこれはおそらく、このコードの最短バージョンではありません理解し、私の選択のExcelファイルに直接貼り付けるためにそれを取得する方法の多くは、おそらくありますが、私はcouldnその部分はまだ出ていない。

私は異なった方法でpyexcelを使用しています。これは、値を行または列に貼り付けるだけで最も簡単な方法であることが判明しました。 joinを使用して、生成されたリストのリストを壊して、各サブリストをそれ自身の行に挿入できるようにしました。私は現在、生成された行を別のExcelワークブックに保存することに決めました。これは、この調査中にワークブックが連続的に破損していたためです。ただし、希望のブックに貼り付ける行をコピーする最後のステップを排除するためにこのコードを操作する方法を知っている人は、私に教えてください。

関連する問題