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 = AdstKeyColumn = AsrcValueColumnStart = BdstValueColumnStart = Bcycle = 4[Sheet2]srcKeyColumn = AdstKeyColumn = AsrcValueColumnStart = BdstValueColumnStart = Bcycle = 4
2.2. Python程序
excel_fill.py
import configparserimport openpyxlclass 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_indexclass 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...