Openpyxl & Python : 键列,值列 - 如何将值相加并将总计分配给相应的键
Openpyxl & Python : column of keys, column of values - how to add up the values and assign totals to corresponding keys
为错误的开始道歉。我现在已经阅读了常见问题解答,希望我的问题符合标准:)。我在电子表格中有以下内容:
Col1 Col2
1234 12.5
1234 8.2
1234 9.8
2334 10.1
2334 7.7
4567 9.8
5678 9.9
5678 8.4
我需要使用 OpenPyxl & Python 对 Col1 中的每个参考编号计算 Col2 中的数字,即
1234 30.5
2334 17.8
4567 9.8
5678 18.3
经过几次错误的开始后,我得到了这个:
#import modules
import openpyxl
from openpyxl.utils import coordinate_from_string, column_index_from_string
from openpyxl.utils.cell import _get_column_letter
import sys
from datetime import date
from datetime import time
import datetime
import calendar
from openpyxl.styles import Color, PatternFill, Font, Border
from shutil import copyfile
#set variables
dest_filename = 'P:\Charging\Chargeable Resources\ChargeableActivity\January2017ChargeableActivity.xlsx'
total = 0
#create objects
wb = openpyxl.load_workbook(filename = dest_filename, data_only=True)
ws1 = wb.get_sheet_by_name('ChargeableActivity')
for i in range(1, ws1.max_row):
#convert ws1.cell(row=i, column=12).value to integer (=Excel convert to number)
if isinstance(ws1.cell(row=i, column=12).value,long):
RFCNumber = ws1.cell(row=i, column=12).value
for col in ws1.iter_cols(min_col=12, max_col = 12, min_row=1):
if ws1.cell(row=i, column=12).value == RFCNumber:
total = total + ws1.cell(row=i, column=14).value
print(RFCNumber,'Total=',total)
但输出是累积的,不会删除重复的 RFC 编号:
Col1 Col2
1234 12.5
1234 20.7
1234 30.5
2334 40.6
4567 48.3
5678 58.1
等
我不是编码员,我正在寻找一种方法来节省大量编辑大型电子表格的时间。欢迎任何建议。谢谢。
试试这个代码:
# Define a dict{} for key:value pairs
ref_total = {}
# Get Data from all rows
for row in ws.rows:
# Slice cells A,B from row tuple
cell_A = row[:1][0]
cell_B = row[1:2][0]
reference = cell_A.value
if reference in ref_total.keys():
ref_total[reference] += cell_B.value
else:
ref_total[reference] = cell_B.value
for key in sorted(ref_total.keys()):
print('%s %s' % (key, ref_total[key]))
测试 Python:3.4.2 - openpyxl:2.4.1 - LibreOffice: 4.3.3.2
为错误的开始道歉。我现在已经阅读了常见问题解答,希望我的问题符合标准:)。我在电子表格中有以下内容:
Col1 Col2
1234 12.5
1234 8.2
1234 9.8
2334 10.1
2334 7.7
4567 9.8
5678 9.9
5678 8.4
我需要使用 OpenPyxl & Python 对 Col1 中的每个参考编号计算 Col2 中的数字,即
1234 30.5
2334 17.8
4567 9.8
5678 18.3
经过几次错误的开始后,我得到了这个:
#import modules
import openpyxl
from openpyxl.utils import coordinate_from_string, column_index_from_string
from openpyxl.utils.cell import _get_column_letter
import sys
from datetime import date
from datetime import time
import datetime
import calendar
from openpyxl.styles import Color, PatternFill, Font, Border
from shutil import copyfile
#set variables
dest_filename = 'P:\Charging\Chargeable Resources\ChargeableActivity\January2017ChargeableActivity.xlsx'
total = 0
#create objects
wb = openpyxl.load_workbook(filename = dest_filename, data_only=True)
ws1 = wb.get_sheet_by_name('ChargeableActivity')
for i in range(1, ws1.max_row):
#convert ws1.cell(row=i, column=12).value to integer (=Excel convert to number)
if isinstance(ws1.cell(row=i, column=12).value,long):
RFCNumber = ws1.cell(row=i, column=12).value
for col in ws1.iter_cols(min_col=12, max_col = 12, min_row=1):
if ws1.cell(row=i, column=12).value == RFCNumber:
total = total + ws1.cell(row=i, column=14).value
print(RFCNumber,'Total=',total)
但输出是累积的,不会删除重复的 RFC 编号:
Col1 Col2
1234 12.5
1234 20.7
1234 30.5
2334 40.6
4567 48.3
5678 58.1
等 我不是编码员,我正在寻找一种方法来节省大量编辑大型电子表格的时间。欢迎任何建议。谢谢。
试试这个代码:
# Define a dict{} for key:value pairs
ref_total = {}
# Get Data from all rows
for row in ws.rows:
# Slice cells A,B from row tuple
cell_A = row[:1][0]
cell_B = row[1:2][0]
reference = cell_A.value
if reference in ref_total.keys():
ref_total[reference] += cell_B.value
else:
ref_total[reference] = cell_B.value
for key in sorted(ref_total.keys()):
print('%s %s' % (key, ref_total[key]))
测试 Python:3.4.2 - openpyxl:2.4.1 - LibreOffice: 4.3.3.2