【办公类-21-16】 20240410三级育婴师 344多选题(题目与答案合并word)

发布于:2024-04-19 ⋅ 阅读:(28) ⋅ 点赞:(0)

 作品展示

背景需求:

前文将APP题库里的育婴师题目下载到EXCEL,并进行手动整理【办公类-21-14】 20240406三级育婴师 344道多选题 UIBOT下载+整理-CSDN博客文章浏览阅读287次,点赞8次,收藏9次。【办公类-21-14】 20240406三级育婴师 344道多选题 UIBOT下载+整理https://blog.csdn.net/reasonsummer/article/details/137420345

如果把EXCEL全部内容复制黏贴到word里,大约有14页

我感觉打印纸张较多,而且实际上背题,就只要把正确答案看眼熟。

因此我希望获得以下的样式

1、只要多选题正确选项的文字答案,并将答案放在题目的括号里

2、括号(正确答案)加粗

第一步:从EXCEL提取每题正确答案字母(多个),并将对应选项后面的文字,写入题目的()(英文状态括号)内,写入一个EXCEL


'''
育婴师多选题,从EXCEL提取内容,将选项答案(不要字母)写入题目中的()内
作者:AI对话大师,阿夏
时间:2024年4月10日
'''



import openpyxl
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string, get_column_letter
import re,time

from openpyxl.styles import Font

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\育婴师理论题爬取'

# 打开Excel文件
workbook = openpyxl.load_workbook(path + r'\多选题(344).xlsx')

# 选择第一个工作表
sheet = workbook.active

# 遍历 C 列和 B 列的每个单元格
for c_cell, b_cell in zip(sheet['C'], sheet['B']):
    # 获取 C 列和 B 列单元格的行号和值
    c_row = c_cell.row
    c_value_all = c_cell.value
    b_row = b_cell.row
    b_value = b_cell.value
    # print(c_row)
    print(c_value_all)
    values=[]
    for c_value in str(c_value_all):
        print(c_value)

        # 在 D 到 K 列之间寻找与 C 列内容相同的单元格,并读取右侧一格的内容
        matching_cells = []
        for column in sheet.iter_cols(min_col=4, max_col=15, min_row=c_row, max_row=c_row):
            for cell in column:
                if cell.value == c_value:
                    # 获取右侧一格的单元格
                    next_cell = sheet.cell(row=cell.row, column=cell.column + 1)
                    next_cell_value = next_cell.value

                    matching_cells.append(next_cell_value)

        # 输出找到的单元格右侧一格的内容
        print(f"C 列单元格 {c_row} 的右侧一格的内容:")
        for v in matching_cells:
            print(v)
            vv=str(v)+' '
            values.append(vv)
        print(values)
        value=' '.join(values)
        print(value)
        
        

    # 查找左括号和右括号的索引位置
    left_parenthesis_index = b_value.find('(')
    right_parenthesis_index = b_value.find(')')

    if left_parenthesis_index != -1 and right_parenthesis_index != -1:
        # 提取括号前后的内容
                # 提取括号前后的内容
        before = b_value[:left_parenthesis_index]
        after = b_value[right_parenthesis_index + 1:]

        # 拼接新的内容
        new_value = f'{before}({value}){after}'
        value = Font(bold=True)

        # 将新内容写入 B 列单元格
        sheet.cell(row=b_row, column=2).value = new_value

# 删除 C 列到 K 列的内容
sheet.delete_cols(3,15)



# 保存修改后的 Excel 文件为 234.xlsx
workbook.save(path + r'\多选题只有答案.xlsx')

# time.sleep(5)

# # 关闭 Excel 文件
# workbook.close()

# import openpyxl
# import re
# from openpyxl.styles import Font

# # 打开Excel文件
# workbook = openpyxl.load_workbook(path + r'\多选题只有答案.xlsx')

# # 选择要操作的工作表
# worksheet = workbook['Sheet1']  # 替换为你的工作表名

# # 遍历所有单元格
# for row in worksheet.iter_rows():
#     for cell in row:
#         # 获取单元格的值
#         cell_value = cell.value

#         # 使用正则表达式提取括号和其中的文字
#         matches = re.findall(r"\((.*?)\)", cell_value)
#         if matches:
#             for match in matches:
#                 # 构建加粗的正则表达式模式
#                 pattern = r"\(" + re.escape(match) + r"\)"

#                 # 替换匹配的文本为加粗格式
#                 cell_value = re.sub(pattern, r"<b>\g<0></b>", cell_value)

#             # 将带有加粗格式的文本赋值回单元格
#             cell.value = cell_value
#             # 设置单元格字体为加粗
#             cell.font = Font(bold=True)

# # 保存修改后的Excel文件
# workbook.save(path + r'\多选题只有答案1.xlsx')

​​

​​

二、手动将整理后的EXCEL文档内容全选,复制到word内(文字黏贴)

复制EXCEL(复制EXCEL两列,黏贴到docx,以文字方式)

​黏贴新建docx

​​

第三步:对word内部文字中()部分文字进行加粗

'''
育婴师多选题,对docx内答案所在的括号内的文字加粗
作者:AI对话大师,阿夏
时间:2024年4月10日
'''


from docx import Document
from docx.shared import Pt, RGBColor


# 打开Word文档
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\育婴师理论题爬取\docx'
doc = Document(path + r'\多选题.docx')

# 遍历段落
for para in doc.paragraphs:
    # 获取段落文本
    text = para.text

    # 查找括号 '(' 和 ')' 的位置
    start_index = text.find('(')
    end_index = text.find(')')

    if start_index != -1 and end_index != -1:
        # 拆分前、中、后部分
        before_text = text[:start_index]
        middle_text = text[start_index:end_index+1]
        after_text = text[end_index+1:]

        # 清空原始段落内容
        para.clear()

        # 添加拆分后的内容到段落
        para.add_run(before_text)
        run = para.add_run(middle_text)
        run.bold = True
        para.add_run(after_text)

# 保存修改后的Word文档
doc.save(path + r'\多选题1.docx')

第四步:把只有正确文字答案的单选题docx检查一下(可能题目有会两个(),会导致答案被写到其他格括号里)

另存为PDF,便于分享和打印

只有9页了(15页缩到9页)

打印效果:

核对过程中,我发现几个答案中间考空格分割不适合,容易看岔,所以我修改代码,

原始的

修改的(讯飞输入法里面的特殊符号)

'''
育婴师多选题,从EXCEL提取内容,将选项答案(不要字母)写入题目中的()内
作者:AI对话大师,阿夏
时间:2024年4月10日
'''



import openpyxl
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string, get_column_letter
import re,time

from openpyxl.styles import Font

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\育婴师理论题爬取'

# 打开Excel文件
workbook = openpyxl.load_workbook(path + r'\多选题(344).xlsx')

# 选择第一个工作表
sheet = workbook.active

# 遍历 C 列和 B 列的每个单元格
for c_cell, b_cell in zip(sheet['C'], sheet['B']):
    # 获取 C 列和 B 列单元格的行号和值
    c_row = c_cell.row
    c_value_all = c_cell.value
    b_row = b_cell.row
    b_value = b_cell.value
    # print(c_row)
    print(c_value_all)
    values=[]
    for c_value in str(c_value_all):
        print(c_value)

        # 在 D 到 K 列之间寻找与 C 列内容相同的单元格,并读取右侧一格的内容
        matching_cells = []
        for column in sheet.iter_cols(min_col=4, max_col=15, min_row=c_row, max_row=c_row):
            for cell in column:
                if cell.value == c_value:
                    # 获取右侧一格的单元格
                    next_cell = sheet.cell(row=cell.row, column=cell.column + 1)
                    next_cell_value = next_cell.value

                    matching_cells.append(next_cell_value)

        # 输出找到的单元格右侧一格的内容
        print(f"C 列单元格 {c_row} 的右侧一格的内容:")
        for v in matching_cells:
            print(v)
            vv=str(v)+'丨'
            # vv=str(v)+' '
            values.append(vv)
        print(values)
        value=' '.join(values)
        print(value)
        
        

    # 查找左括号和右括号的索引位置
    left_parenthesis_index = b_value.find('(')
    right_parenthesis_index = b_value.find(')')

    if left_parenthesis_index != -1 and right_parenthesis_index != -1:
        # 提取括号前后的内容
                # 提取括号前后的内容
        before = b_value[:left_parenthesis_index]
        after = b_value[right_parenthesis_index + 1:]

        # 拼接新的内容
        new_value = f'{before}({value}){after}'
        value = Font(bold=True)

        # 将新内容写入 B 列单元格
        sheet.cell(row=b_row, column=2).value = new_value

# 删除 C 列到 K 列的内容
sheet.delete_cols(3,15)



# 保存修改后的 Excel 文件为 234.xlsx
workbook.save(path + r'\多选题只有答案1.xlsx')

# time.sleep(5)

# # 关闭 Excel 文件
# workbook.close()

# import openpyxl
# import re
# from openpyxl.styles import Font

# # 打开Excel文件
# workbook = openpyxl.load_workbook(path + r'\多选题只有答案.xlsx')

# # 选择要操作的工作表
# worksheet = workbook['Sheet1']  # 替换为你的工作表名

# # 遍历所有单元格
# for row in worksheet.iter_rows():
#     for cell in row:
#         # 获取单元格的值
#         cell_value = cell.value

#         # 使用正则表达式提取括号和其中的文字
#         matches = re.findall(r"\((.*?)\)", cell_value)
#         if matches:
#             for match in matches:
#                 # 构建加粗的正则表达式模式
#                 pattern = r"\(" + re.escape(match) + r"\)"

#                 # 替换匹配的文本为加粗格式
#                 cell_value = re.sub(pattern, r"<b>\g<0></b>", cell_value)

#             # 将带有加粗格式的文本赋值回单元格
#             cell.value = cell_value
#             # 设置单元格字体为加粗
#             cell.font = Font(bold=True)

# # 保存修改后的Excel文件
# workbook.save(path + r'\多选题只有答案1.xlsx')

手动复制到docx

'''
育婴师多选题,对docx内答案所在的括号内的文字加粗
作者:AI对话大师,阿夏
时间:2024年4月17日
'''


from docx import Document
from docx.shared import Pt, RGBColor


# 打开Word文档
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\育婴师理论题爬取\docx'
doc = Document(path + r'\多选题2.docx')

# 遍历段落
for para in doc.paragraphs:
    # 获取段落文本
    text = para.text

    # 查找括号 '(' 和 ')' 的位置
    start_index = text.find('(')
    end_index = text.find(')')

    if start_index != -1 and end_index != -1:
        # 拆分前、中、后部分
        before_text = text[:start_index]
        middle_text = text[start_index:end_index+1]
        after_text = text[end_index+1:]

        # 清空原始段落内容
        para.clear()

        # 添加拆分后的内容到段落
        para.add_run(before_text)
        run = para.add_run(middle_text)
        run.bold = True
        para.add_run(after_text)

# 保存修改后的Word文档