共计 4257 个字符,预计需要花费 11 分钟才能阅读完成。
1. excel 表格格局
1.1. 源 excel 表格内容
Sheet1
ID | Module | Owner | Result | Comment |
---|---|---|---|---|
C000001 | LTE | 郭靖 | Support | 默认反对 |
C000002 | TD-SCDMA | 郭靖 | Not Support | 硬件不反对 |
C000004 | WCMDA | 郭靖 | Support | |
C000005 | CDMA2000 | 郭靖 | Not Support | |
C000006 | HSDPA | 郭靖 | Support | |
C000007 | EDGE | 郭靖 | Support | |
C000008 | GPRS | 郭靖 | Support | |
C000009 | GSM | 郭靖 | Support | |
C000010 | WIFI | 黄蓉 | Support | |
C000011 | FM | 黄蓉 | Support | |
C000012 | GPS | 黄蓉 | Support | |
C000013 | RFID | 杨过 | Not Support | |
C000014 | NFC | 杨过 | Support |
Sheet2
ID | Module | Owner | Result | Comment |
---|---|---|---|---|
C000001 | Call | 令狐冲 | Support | |
C000003 | Message | 令狐冲 | Support | |
C000004 | Music | 萧峰 | Not Support | 价格太高未预置 |
1.2. 指标 excel 表格内容
Sheet1
ID | Module | Owner | Result | Comment |
---|---|---|---|---|
C000001 | ||||
C000002 | ||||
C000003 | ||||
C000004 | ||||
C000005 | ||||
C000006 | ||||
C000007 | ||||
C000008 | ||||
C000009 | ||||
C000010 | ||||
C000011 | ||||
C000012 | ||||
C000013 | ||||
C000014 |
Sheet2
ID | Module | Owner | Result | Comment |
---|---|---|---|---|
C000001 | ||||
C000002 | ||||
C000003 | ||||
C000004 |
2. 如何导入源 excel 表格的内容到指标 excel 表格
2.1. 设计要导入的配置文件
config.ini
[Sheet1]
srcKeyColumn = A
dstKeyColumn = A
srcValueColumnStart = B
dstValueColumnStart = B
cycle = 4
[Sheet2]
srcKeyColumn = A
dstKeyColumn = A
srcValueColumnStart = B
dstValueColumnStart = B
cycle = 4
2.2. Python 程序
excel_fill.py
import configparser
import openpyxl
class ReadConfig(object):
def get_excel_column_number(self, column):
'''
Parameters
----------
column : string
示意 excel 表格中列的字符串,该字符串如果为字母则转为数字,如果为数字字符串则间接转型
Returns
-------
TYPE
数字.
'''
if column.isalpha():
return openpyxl.utils.column_index_from_string(column)
else:
return int(column)
def get_config(self, configfile):
'''
Parameters
----------
configfile : string
配置文件名称. 如下例子
[Sheet0] --- 示意 excel 表格 (两个,一个是源文件,一个指标文件) 的 Sheet0 页面
srcKeyColumn = 1 --- 示意源 excel 表格的 key 所在的列
dstKeyColumn = 1 --- 示意指标 excel 表格的 key 所在的列
srcValueColumnStart = 27 --- 示意源 excel 表格的 value 开始列
dstValueColumnStart = 27 --- 示意指标 excel 表格的 value 开始列
cycle = 4 --- 示意总共有几列 value 须要拷贝
Returns
-------
dict_index : list
把上述配置文件生成为一个 list,list 里的每个项是 dict 类型,不便程序应用.
'''
config = configparser.ConfigParser()
config.read(configfile, encoding='utf-8')
dict_index = []
for sheet in config.sections():
dict_pair = {}
dict_pair['sheet'] = sheet
srckeylist = []
for srckey in config.get(sheet,'srcKeyColumn').split(','):
key = srckey.strip()
srckeylist.append(self.get_excel_column_number(key))
dict_pair['srcKeyColumn'] = srckeylist
dstkeylist = []
for dstkey in config.get(sheet,'dstKeyColumn').split(','):
key = dstkey.strip()
dstkeylist.append(self.get_excel_column_number(key))
dict_pair['dstKeyColumn'] = dstkeylist
dict_pair['srcValueColumnStart'] = self.get_excel_column_number(config.get(sheet,'srcValueColumnStart'))
dict_pair['dstValueColumnStart'] = self.get_excel_column_number(config.get(sheet,'dstValueColumnStart'))
dict_pair['cycle'] = int(config.get(sheet,'cycle'))
dict_index.append(dict_pair)
return dict_index
class CopyExcel(object):
def read_key_and_value_from_src(self, sheet, key_list, content_column):
'''
Parameters
----------
sheet : string
源 excel 表格的 sheet 页面名称.
key_list : list
在 excel 表格中,以几列的组合作为 key,这里 list 蕴含了几列的列数.
content_column : number
要读取的 excel 表格的列.
Returns
-------
src_key_and_value : dict
获取的键值对.
'''
src_key_and_value = {}
for row_count in range(1, sheet.max_row + 1, 1):
key = ""
for key_item in key_list:
key = key + str(sheet.cell(row = row_count, column = key_item).value)
value = sheet.cell(row = row_count, column = content_column).value
if (key not in ["", None]) and (value not in ["", None]):
src_key_and_value[key] = value
return src_key_and_value
def write_value_to_dst_by_key(self, sheet, key_list, content_column, src_key_and_value):
'''
Parameters
----------
sheet : string
指标 excel 表格的 sheet 页面名称.
key_list : list
在 excel 表格中,以几列的组合作为 key,这里 list 蕴含了几列的列数.
content_column : number
要写入的 excel 表格的列.
src_key_and_value : dict
键值对,依据匹配的键在对应 column 写入值.
Returns
-------
None.
'''
for row_count in range(1, sheet.max_row + 1, 1):
key = ""
for key_item in key_list:
key = key + str(sheet.cell(row = row_count, column = key_item).value)
if key in src_key_and_value.keys():
#print(key)
sheet.cell(row = row_count, column = content_column, value=src_key_and_value[key])
if __name__ == '__main__':
excel_config = ReadConfig()
dict_index = excel_config.get_config('config.ini')
src_excel_file = r"Src.xlsx"
src_wb = openpyxl.load_workbook(src_excel_file)
dst_excel_file = r"Dst.xlsx"
dst_wb = openpyxl.load_workbook(dst_excel_file)
copy_excel = CopyExcel()
for item in dict_index:
src_sheet = src_wb[item['sheet']]
dst_sheet = dst_wb[item['sheet']]
for i in range(item['cycle']):
src_key_and_value = copy_excel.read_key_and_value_from_src(src_sheet, item['srcKeyColumn'], item['srcValueColumnStart'] + i)
copy_excel.write_value_to_dst_by_key(dst_sheet, item['dstKeyColumn'], item['dstValueColumnStart'] + i, src_key_and_value)
dst_wb.save(dst_excel_file)
3. 参考文档
1. 表格中的模块选用了如下 link 的模块
手机的电话流量 wifi 等性能都离不开 RF 模块,它是怎么工作的?
https://www.jianshu.com/p/9bf…
2.Markdown 教程
https://www.runoob.com/markdo…
正文完