pallas 发表于 2024-7-23 10:08:29

如何将下述代码可视化

import xlwings as xw
import pandas as pd
import openpyxl
import os
from openpyxl import load_workbook
from openpyxl.styles import Font, Border, Side
from openpyxl.styles import Alignment
from datetime import datetime
from openpyxl import Workbook
from openpyxl.styles import PatternFill
from datetime import datetime
from openpyxl.utils import get_column_letter
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

def extract_tables_from_excel(file_path, sheet_name='Sheet1'):
    df = pd.read_excel(file_path, sheet_name=sheet_name)
    tables = []
    temp_df = []
    # 使用os.path.basename获取文件名作为数据来源的标识
    source = os.path.basename(file_path)

    # 分割逻辑:遇到空行就分割
    for _, row in df.iterrows():
      if row.isnull().all():# 判断空行
            if temp_df:
                # 在将临时表添加到表格列表之前,为每行添加一个表示来源的列
                temp_df_with_source = pd.DataFrame(temp_df)
                temp_df_with_source['来源'] = source# 添加来源列
                tables.append(temp_df_with_source)
                temp_df = []
      else:
            temp_df.append(row)

    if temp_df:
      # 同样,为最后一个临时表的每行添加一个表示来源的列
      temp_df_with_source = pd.DataFrame(temp_df)
      temp_df_with_source['来源'] = source# 添加来源列
      tables.append(temp_df_with_source)

    return tables

def merge_tables(merging_tables, existing_tables):
    merged_tables = []
    for new_table, old_table in zip(merging_tables, existing_tables):
      # 在合并时,保留来源列
      merged_table = pd.concat(]), new_table], ignore_index=True)
      merged_tables.append(merged_table)
    return merged_tables

def main(input_files, existing_files, output_dir):
    all_existing_tables =

    for file in input_files:
      merging_tables = extract_tables_from_excel(file)
      all_existing_tables = merge_tables(merging_tables, all_existing_tables)

      # 输出合并后的表格,并保留来源列
    for idx, table in enumerate(all_existing_tables):
      output_file_path = os.path.join(output_dir, f'merged_output_{idx + 1}.xlsx')
      table.to_excel(output_file_path, index=False)
      print(f'Saved merged table to {output_file_path}')

    # 同一个sheet表中合并小表格

def table_merge2(file_path,sheet_name,output_file):
    df = pd.read_excel(file_path, sheet_name=sheet_name, header=None)
    # 初始化一个空的DataFrame列表来存储各个小表格
    small_tables = []
    current_table = []
    header_found = False

    # 遍历所有行
    for index, row in df.iterrows():
      if not row.isnull().all():# 如果当前行不是全空
            if not header_found:# 如果还没找到表头
                header = df.iloc# 获取表头
                header_found = True
            else:# 如果已经找到表头,则将当前行添加到当前小表格中
                current_table.append(row.tolist())
      else:# 如果当前行是全空,表示一个小表格结束
            if current_table:# 如果当前小表格不为空
                # 将当前小表格转换为DataFrame,并去掉可能存在的空行(例如最后两行)
                small_df = pd.DataFrame(current_table, columns=header)
                small_tables.append(small_df)
            current_table = []# 重置当前小表格

    # 处理最后一个小表格(如果有的话)
    if current_table:
      small_df = pd.DataFrame(current_table, columns=header)
      small_tables.append(small_df)

    # 使用concat函数合并所有小表格
    merged_df = pd.concat(small_tables, ignore_index=True)

    # 添加序号(如果没有的话)
    if '序号' not in merged_df.columns:
      merged_df.insert(0, '序号', range(1, len(merged_df) + 1))
    else:
      merged_df['序号'] = range(1, len(merged_df) + 1)

    merged_df.to_excel(output_file, index=False)

def table_merge1(file_path,sheet_name,output_file):
    df = pd.read_excel(file_path, sheet_name=sheet_name, header=None)
    # 初始化一个空的DataFrame列表来存储各个小表格
    small_tables = []
    current_table = []
    header_found = False

    # 遍历所有行
    for index, row in df.iterrows():
      if not row.isnull().all():# 如果当前行不是全空
            if not header_found:# 如果还没找到表头
                header = df.iloc# 获取表头
                header_found = True
            else:# 如果已经找到表头,则将当前行添加到当前小表格中
                current_table.append(row.tolist())
      else:# 如果当前行是全空,表示一个小表格结束
            if current_table:# 如果当前小表格不为空
                # 将当前小表格转换为DataFrame,并去掉可能存在的空行(例如最后两行)
                small_df = pd.DataFrame(current_table, columns=header)
                small_tables.append(small_df)
            current_table = []# 重置当前小表格

    # 处理最后一个小表格(如果有的话)
    if current_table:
      small_df = pd.DataFrame(current_table, columns=header)
      small_tables.append(small_df)

    # 使用concat函数合并所有小表格
    merged_df = pd.concat(small_tables, ignore_index=True)

    # 添加序号(如果没有的话)
    if '序号' not in merged_df.columns:
      merged_df.insert(0, '序号', range(1, len(merged_df) + 1))
    else:
      merged_df['序号'] = range(1, len(merged_df) + 1)

    merged_df.to_excel(output_file, index=False)

def table_merge(file_path,sheet_name,output_file):
    df = pd.read_excel(file_path, sheet_name=sheet_name, header=None)
    # 初始化一个空的DataFrame列表来存储各个小表格
    small_tables = []
    current_table = []
    header_found = False

    # 遍历所有行
    for index, row in df.iterrows():
      if not row.isnull().all():# 如果当前行不是全空
            if not header_found:# 如果还没找到表头
                header = df.iloc# 获取表头
                header_found = True
            else:# 如果已经找到表头,则将当前行添加到当前小表格中
                current_table.append(row.tolist())
      else:# 如果当前行是全空,表示一个小表格结束
            if current_table:# 如果当前小表格不为空
                # 将当前小表格转换为DataFrame,并去掉可能存在的空行(例如最后两行)
                small_df = pd.DataFrame(current_table, columns=header)
                small_tables.append(small_df)
            current_table = []# 重置当前小表格

    # 处理最后一个小表格(如果有的话)
    if current_table:
      small_df = pd.DataFrame(current_table, columns=header)
      small_tables.append(small_df)

    # 使用concat函数合并所有小表格
    merged_df = pd.concat(small_tables, ignore_index=True)

    # 添加序号(如果没有的话)
    if '序号' not in merged_df.columns:
      merged_df.insert(0, '序号', range(1, len(merged_df) + 1))
    else:
      merged_df['序号'] = range(1, len(merged_df) + 1)

    merged_df.to_excel(output_file, index=False)

def merge_excels(merged_input_files, merged_output_file):
    # 创建一个空的DataFrame来存储所有数据
    combined_df = pd.DataFrame()

    # 遍历每个输入文件
    for file in merged_input_files:
      # 读取每个Excel文件
      df = pd.read_excel(file)
      # 将数据追加到combined_df
      combined_df = pd.concat(, ignore_index=True)

    # 将合并后的数据保存到新的Excel文件
    combined_df.to_excel(merged_output_file, index=False)
    print(f"合并完成!新文件保存在: {merged_output_file}")

# 去除日期字符串中的多余斜杠
def clean_date_string(date_str):
    return date_str.rstrip('/')

# 检查并填充颜色的函数
def check_and_fill_dates(file_path, hang_low, hang_high, lie_low, lie_high):
    # 加载Excel文件
    workbook = openpyxl.load_workbook(file_path)
    sheet = workbook.active

    # 定义填充颜色
    yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

    for row in range(hang_low, hang_high):# 从第2行到第93行
      prev_end_date = None
      fill_row_yellow = False# 标记是否需要填充整行为黄色
      for col in range(lie_low, lie_high):# M列到P列,对应Excel中的13到16列
            cell = sheet.cell(row=row, column=col)
            cell_value = cell.value

            if isinstance(cell_value, str) and '-' in cell_value:
                try:
                  start_date_str, end_date_str = cell_value.split('-')
                  start_date_str = clean_date_string(start_date_str.strip())
                  end_date_str = clean_date_string(end_date_str.strip())
                  start_date = datetime.strptime(start_date_str, '%Y/%m/%d')
                  end_date = datetime.strptime(end_date_str, '%Y/%m/%d')

                  if prev_end_date and start_date != prev_end_date:
                        # 时间段不连续,标记整行需要填充黄色
                        fill_row_yellow = True
                  prev_end_date = end_date

                except ValueError:
                  # 日期格式不正确,标记整行需要填充黄色
                  fill_row_yellow = True
            else:
                # 不是日期单元格,标记整行需要填充黄色
                fill_row_yellow = True

      # 如果需要填充整行为黄色
      if fill_row_yellow:
            for col in range(1, sheet.max_column + 1):
                sheet.cell(row=row, column=col).fill = yellow_fill

    # 保存修改后的Excel文件
    workbook.save(r'D:\first\merged_output_3_yellow.xlsx')

# 合并表格
def output_collect(file_paths, output_file_path):
    # 创建一个新的Workbook作为输出
    wb_out = Workbook()# 使用Workbook()来创建一个空的Workbook
    ws_out = wb_out.active# 获取活动工作表,默认是第一个工作表
    ws_out.title = 'MergedSheet'# 可以给工作表命名

    # 用于记录已合并的行数,以便在后续文件中跳过标题行(如果需要)
    merged_rows = 0

    # 遍历每个Excel文件
    for file_path in file_paths:
      # 加载Excel工作簿
      wb_in = load_workbook(file_path)
      ws_in = wb_in.active

      # 假设每个文件的Sheet表都有标题行,并且我们只想合并数据行
      # (如果你想要合并标题行,可以调整下面的起始行)
      start_row = 1 if merged_rows > 0 else 1

      # 遍历工作表的行和列
      for row in ws_in.iter_rows(min_row=start_row, max_row=ws_in.max_row, min_col=1, max_col=ws_in.max_column,
                                 values_only=False):
            for cell in row:
                # 在新工作表中找到对应的单元格
                new_cell = ws_out.cell(row=cell.row + merged_rows - (1 if start_row == 2 else 0), column=cell.column)

                # 复制值
                new_cell.value = cell.value

                # 尝试复制格式(这里只复制字体和填充作为示例)
                if cell.font is not None:
                  new_cell.font = cell.font.copy()
                if cell.fill is not None:
                  new_cell.fill = cell.fill.copy()

                  # 注意:这里没有复制边框、对齐方式等其他格式

      # 更新已合并的行数
      merged_rows += ws_in.max_row - (1 if start_row == 2 else 0)

      wb_out.save(output_file_path)

def select_data_no(input_folder1, input_folder2, output_folder):
    # 读取两个Excel文件
    merged_output_5 = pd.read_excel(input_folder1)
    merged_output_3 = pd.read_excel(input_folder2)

    # 将“merged_output_5”中“授信金额(万元)”列的数据除以10000,并重命名为“敞口金额”
    merged_output_5['敞口金额'] = merged_output_5['授信金额(万元)'] / 10000

    # 剔除“merged_output_5”中“客户名称”列含有“(个人)”的行
    if '客户名称' in merged_output_5.columns:
      merged_output_5 = merged_output_5[~merged_output_5['客户名称'].str.contains('(个人)')]

    # 确保'国企业务分类'列是字符串类型
    merged_output_3['国企业务分类'] = merged_output_3['国企业务分类'].astype(str)

    # 剔除“merged_output_3”中“国企业务分类”列含有“市场化”、“化债”、“隐债”或“隐债置换”的行
    if '国企业务分类' in merged_output_3.columns:
      merged_output_3 = merged_output_3[~merged_output_3['国企业务分类'].str.contains('市场化|化债|隐债|隐债置换')]

    # 定义要合并的列
    columns_to_merge = ['客户名称', '授信品种', '当前进展', '敞口金额',
                        '已投放金额', '储备金额', '利率', '期限(年)', '周督促会-南岸支行.xlsx']

    existing_columns_5 =

    # 从merged_output_5中选择实际存在的列
    merged_output_5_selected = merged_output_5.copy()

    existing_columns_3 =

    # 从merged_output_3中选择实际存在的列
    merged_output_3_selected = merged_output_3.copy()

    # 合并两个DataFrame
    merged_df = pd.concat(, ignore_index=True)

    # 重命名列,将“基数汇总”表中的“敞口日均”改为“基数”,将“一季度敞口日均”表中的“敞口日均”改为“一季度敞口日均”
    merged_df = merged_df.rename(columns={'周督促会-南岸支行.xlsx': '经营机构'})

    # 保存合并后的DataFrame到一个新的Excel文件
    output_path = os.path.join(output_folder, '非平台项目情况.xlsx')
    merged_df.to_excel(output_path, index=False)

    print(f"合并完成,并已保存到{output_path}")

def sort_data_no(input_folder):
    # 读取合并后的Excel文件
    merged_df = pd.read_excel(input_folder)

    # 添加序号列
    merged_df['序号'] = range(1, len(merged_df) + 1)

    # 将'敞口金额'和'已投放金额'列转换为数值格式
    merged_df['敞口金额'] = pd.to_numeric(merged_df['敞口金额'], errors='coerce')
    merged_df['已投放金额'] = pd.to_numeric(merged_df['已投放金额'], errors='coerce')

    # 确保'储备金额'列存在,如果不存在则计算并添加
    if '储备金额' not in merged_df.columns:
      # 计算'储备金额':如果'已投放金额'为空,则'储备金额'等于'敞口金额',否则等于'敞口金额'减去'已投放金额'
      merged_df['储备金额'] = merged_df.apply(
            lambda row: row['敞口金额'] if pd.isna(row['已投放金额']) else row['敞口金额'] - row['已投放金额'],
            axis=1
      )

    # 填充'已投放金额'的空值为0
    merged_df['已投放金额'] = merged_df['已投放金额'].fillna(0)

    # 定义列的排序顺序
    column_order = ['序号', '客户名称', '授信品种', '当前进展', '敞口金额', '已投放金额',
                  '储备金额', '利率', '期限(年)','经营机构']

    # 按照指定的顺序重新排列列
    merged_df = merged_df

    # 定义“当前进展”列的排序顺序
    progress_order = [
      '已投放', '部分投放', '已批待投', '总行上会', '总行审查',
      '分行上会', '分行审查', '组卷调查', '营销阶段', '已销号'
    ]

    # 将“当前进展”列转换为Categorical数据类型,并应用排序顺序
    merged_df['当前进展'] = pd.Categorical(merged_df['当前进展'], categories=progress_order, ordered=True)

    # 使用fillna方法将'储备金额'列中的空值替换为0
    merged_df['储备金额'] = merged_df['储备金额'].fillna(0)

    # 按照“当前进展”列和“储备金额”列进行排序
    merged_df_sorted = merged_df.sort_values(by=['当前进展', '储备金额'], ascending=)
    merged_df_sorted = merged_df_sorted.reset_index(drop=True)

    # 保存排序后的DataFrame到一个新的Excel文件
    merged_df_sorted.to_excel(input_folder, index=False)

    print(f"排序完成,并已保存到{input_folder}")

def insert_title_and_save_no(excel_path, output_folder):
    # 加载现有的Excel文件
    wb = load_workbook(excel_path)
    ws = wb.active

    # 获取当天的日期
    today_date = datetime.now().strftime('%Y-%m-%d')
    filename = f"非平台项目情况{today_date}.xlsx"

    # 插入一行作为标题行(如果需要)
    ws.insert_rows(1)

    # 合并单元格A1:K1,这里假设标题行是第一行
    ws.merge_cells('A1:J1')

    # 写入标题
    title = f"重庆分行项目储备情况表-非平台项目情况(截至{today_date})"
    ws['A1'] = title

    # 设置标题字体格式(加粗)
    title_font = Font(size=18, bold=True)
    ws['A1'].font = title_font

    # 居中对齐标题
    title_alignment = Alignment(horizontal='center')
    ws['A1'].alignment = title_alignment

    # 遍历工作表中从第三行开始的所有行
    for row in ws.iter_rows(min_row=3, max_row=ws.max_row):
      for cell in row:
            # 检查单元格值是否为 None
            if cell.value is None:
                continue

            # 检查单元格是否在敞口金额、已投放金额或储备金额列中
            if cell.column in :# 根据实际列号进行调整
                # 尝试将单元格内容转换为浮点数并保留两位小数
                try:
                  cell.value = round(float(cell.value), 2)
                except ValueError:
                  # 如果转换失败(例如,内容不是数字),则忽略该单元格
                  continue

            # 检查单元格是否在利率列中
            if cell.column == 8:# 根据实际列号进行调整
                # 尝试将利率转换为百分比形式并保留两位小数
                try:
                  cell.value = "{:.2f}%".format(cell.value * 100)
                except ValueError:
                  # 如果转换失败,则忽略该单元格
                  continue

    # 设置第二行的字体加粗和边框样式
    for cell in ws['2:2']:# 这里'2:2'指的是第二行的所有单元格
      cell.font = Font(bold=True)
      cell.border = Border(left=Side(style='thin'), right=Side(style='thin'),
                           top=Side(style='thin'), bottom=Side(style='thin'))

    # 保存修改后的Excel文件,使用新的文件名
    output_path = os.path.join(output_folder, filename)
    wb.save(output_path)
    print(f"文件已保存为:{output_path}")

def select_data(input_folder, output_folder):
    # 读取Excel文件
    df = pd.read_excel(input_folder)

    # 如果'经营机构'列存在,则先将其删除或重命名,以避免冲突
    if '经营机构' in df.columns:
      df = df.drop(columns=['经营机构'])

      # 定义需要提取的“国企业务分类”列表
    business_types = ['市场化', '化债', '隐债', '隐债置换']

    # 确保'敞口金额'和'已投放金额'列是数值类型
    df['敞口金额'] = pd.to_numeric(df['敞口金额'], errors='coerce')
    df['已投放金额'] = pd.to_numeric(df['已投放金额'], errors='coerce')

    # 计算'储备金额'列
    df['储备金额'] = df.apply(
      lambda row: row['敞口金额'] if pd.isna(row['已投放金额']) else row['敞口金额'] - row['已投放金额'],
      axis=1
    )

    # 筛选出符合条件的数据列
    filtered_df = df.isin(business_types)][[
      '客户名称', '授信品种', '当前进展', '国企业务分类', '敞口金额', '已投放金额',
      '利率', '期限(年)', '储备金额','周督促会-南岸支行.xlsx'
    ]]

    filtered_df = filtered_df.rename(columns={'周督促会-南岸支行.xlsx': '经营机构'})

    # 将筛选后的数据保存到新的Excel文件中
    filtered_df.to_excel(output_folder, index=False)

    print(f"数据提取完成,并已保存到{output_folder}")

def sort_data(input_folder):
    # 读取合并后的Excel文件
    merged_df = pd.read_excel(input_folder)

    # 添加序号列
    merged_df['序号'] = range(1, len(merged_df) + 1)

    merged_df['敞口金额'] = pd.to_numeric(merged_df['敞口金额'], errors='coerce')
    merged_df['已投放金额'] = pd.to_numeric(merged_df['已投放金额'], errors='coerce')

    # 确保'储备金额'列存在,如果不存在则计算并添加
    if '储备金额' not in merged_df.columns:
      # 计算'储备金额':如果'已投放金额'为空,则'储备金额'等于'敞口金额',否则等于'敞口金额'减去'已投放金额'
      merged_df['储备金额'] = merged_df.apply(
            lambda row: row['敞口金额'] if pd.isna(row['已投放金额']) else row['敞口金额'] - row['已投放金额'],
            axis=1
      )

    # 填充'已投放金额'的空值为0
    merged_df['已投放金额'] = merged_df['已投放金额'].fillna(0)

    # 定义列的排序顺序
    column_order = ['序号', '客户名称', '授信品种', '当前进展', '国企业务分类', '敞口金额',
                     '已投放金额', '储备金额', '利率', '期限(年)', '经营机构']

    # 按照指定的顺序重新排列列
    merged_df = merged_df

    # 定义“当前进展”列的排序顺序
    progress_order = [
      '已投放', '部分投放', '已批待投', '总行上会', '总行审查',
      '分行上会', '分行审查', '组卷调查', '营销阶段', '已销号'
    ]

    # 将“当前进展”列转换为Categorical数据类型,并应用排序顺序
    merged_df['当前进展'] = pd.Categorical(merged_df['当前进展'], categories=progress_order, ordered=True)

    # 使用fillna方法将'储备金额'列中的空值替换为0
    merged_df['储备金额'] = merged_df['储备金额'].fillna(0)

    # 按照“当前进展”列和“储备金额”列进行排序
    merged_df_sorted = merged_df.sort_values(by=['当前进展', '储备金额'], ascending=)

    # 保存排序后的DataFrame到一个新的Excel文件
    merged_df_sorted.to_excel(input_folder, index=False)

    print(f"排序完成,并已保存到{input_folder}")

def insert_title_and_save(excel_path, output_folder):
    # 加载现有的Excel文件
    wb = load_workbook(excel_path)
    ws = wb.active

    # 获取当天的日期
    today_date = datetime.now().strftime('%Y-%m-%d')
    filename = f"平台业务{today_date}.xlsx"

    # 插入一行作为标题行(如果需要)
    ws.insert_rows(1)

    # 合并单元格A1:K1,这里假设标题行是第一行
    ws.merge_cells('A1:K1')

    # 写入标题
    title = f"重庆分行项目储备情况表-平台业务(截至{today_date})"
    ws['A1'] = title

    # 设置标题字体格式(加粗)
    title_font = Font(size=18, bold=True)
    ws['A1'].font = title_font

    # 居中对齐标题
    title_alignment = Alignment(horizontal='center')
    ws['A1'].alignment = title_alignment

    # 遍历工作表中从第三行开始的所有行
    for row in ws.iter_rows(min_row=3, max_row=ws.max_row):
      for cell in row:
            # 检查单元格值是否为 None
            if cell.value is None:
                continue

            # 检查单元格是否在敞口金额、已投放金额或储备金额列中
            if cell.column in :# 根据实际列号进行调整
                # 尝试将单元格内容转换为浮点数并保留两位小数
                try:
                  cell.value = round(float(cell.value), 2)
                except ValueError:
                  # 如果转换失败(例如,内容不是数字),则忽略该单元格
                  continue

            # 检查单元格是否在利率列中
            if cell.column == 9:# 根据实际列号进行调整
                # 尝试将利率转换为百分比形式并保留两位小数
                try:
                  cell.value = "{:.2f}%".format(cell.value * 100)
                except ValueError:
                  # 如果转换失败,则忽略该单元格
                  continue

    # 设置第二行的字体加粗和边框样式
    for cell in ws['2:2']:# 这里'2:2'指的是第二行的所有单元格
      cell.font = Font(bold=True)
      cell.border = Border(left=Side(style='thin'), right=Side(style='thin'),
                           top=Side(style='thin'), bottom=Side(style='thin'))

    # 保存修改后的Excel文件,使用新的文件名
    output_path = os.path.join(output_folder, filename)
    wb.save(output_path)
    print(f"文件已保存为:{output_path}")

if __name__ == "__main__":
    input_files = [r"D:\周督促会-南岸支行.xlsx",
                   r"D:\周督促会-业务一部.xlsx",
                   r"D:\周督促会-渝北支行.xlsx",
                   r"D:\周督促会-九龙坡支行.xlsx",
                   r"D:\周督促会-高新支行.xlsx",
                   r"D:\周督促会-巴南支行.xlsx",
                   r"D:\周督促会-长寿支行.xlsx",
                   r"D:\周督促会-营业部.xlsx",
                   r"D:\周督促会-业务二部.xlsx",
                   r"D:\周督促会-业务四部.xlsx"]
    existing_files = [r"D:\next\output_table_1.xlsx",
                      r"D:\next\output_table_2.xlsx",
                      r"D:\next\output_table_3.xlsx",
                      r"D:\next\output_table_4.xlsx",
                      r"D:\next\output_table_5.xlsx",
                      r"D:\next\output_table_6.xlsx",
                      r"D:\next\output_table_7.xlsx",
                      r"D:\next\output_table_8.xlsx",
                      r"D:\next\output_table_9.xlsx",
                      r"D:\next\output_table_10.xlsx",
                      r"D:\next\output_table_11.xlsx",
                      r"D:\next\output_table_12.xlsx",
                      r"D:\next\output_table_13.xlsx",
                      r"D:\next\output_table_14.xlsx",
                      r"D:\next\output_table_15.xlsx",
                      r"D:\next\output_table_16.xlsx",
                      r"D:\next\output_table_17.xlsx",
                      r"D:\next\output_table_18.xlsx",
                      r"D:\next\output_table_19.xlsx",
                      r"D:\next\output_table_20.xlsx",
                      r"D:\next\output_table_21.xlsx",
                      r"D:\next\output_table_22.xlsx",
                      r"D:\next\output_table_23.xlsx"]
    output_dir = r'D:\first'
    main(input_files, existing_files, output_dir)


    table_merge2(r'D:\first\merged_output_3.xlsx', 'Sheet1',
                r"D:\first\merged_output_3.xlsx")
    table_merge2(r'D:\first\merged_output_5.xlsx', 'Sheet1',
                r"D:\first\merged_output_5.xlsx")
    table_merge2(r'D:\first\merged_output_7.xlsx', 'Sheet1',
                r"D:\first\merged_output_7.xlsx")
    table_merge1(r'D:\first\merged_output_9.xlsx', 'Sheet1',
               r"D:\first\merged_output_9.xlsx")
    table_merge1(r'D:\first\merged_output_11.xlsx', 'Sheet1',
               r"D:\first\merged_output_11.xlsx")
    table_merge(r'D:\first\merged_output_13.xlsx', 'Sheet1',
               r"D:\first\merged_output_13.xlsx")
    table_merge(r'D:\first\merged_output_15.xlsx', 'Sheet1',
                r"D:\first\merged_output_15.xlsx")
    table_merge(r'D:\first\merged_output_17.xlsx', 'Sheet1',
                r"D:\first\merged_output_17.xlsx")
    table_merge(r'D:\first\merged_output_19.xlsx', 'Sheet1',
                r"D:\first\merged_output_19.xlsx")
    table_merge(r'D:\first\merged_output_21.xlsx', 'Sheet1',
                r"D:\first\merged_output_21.xlsx")
    table_merge(r'D:\first\merged_output_23.xlsx', 'Sheet1',
                r"D:\first\merged_output_23.xlsx")


    check_and_fill_dates(r'D:\first\merged_output_3.xlsx', 2, 94, 14, 17)   # high要加1

    file_paths = [r'D:\first\merged_output_3_yellow.xlsx',
                  r'D:\first\merged_output_5.xlsx',
                  r'D:\first\merged_output_7.xlsx',
                  r'D:\first\merged_output_9.xlsx',
                  r'D:\first\merged_output_11.xlsx',
                  r'D:\first\merged_output_13.xlsx',
                  r'D:\first\merged_output_15.xlsx',
                  r'D:\first\merged_output_17.xlsx',
                  r'D:\first\merged_output_19.xlsx',
                  r'D:\first\merged_output_21.xlsx',
                  r'D:\first\merged_output_23.xlsx']
    # 设定汇总后的Excel文件路径
    output_folder = r'D:\大连银行\公司银行部\周督促会'
    output_file_path = os.path.join(output_folder, 'combined_excel_with_format1.xlsx')
    output_collect(file_paths, output_file_path)

    input_folder1 = r"D:\first\merged_output_5.xlsx"
    input_folder2 = r"D:\first\merged_output_3.xlsx"
    output_folder = r"D:\over"
    select_data_no(input_folder1, input_folder2, output_folder)

    input_folder = r"D:\over\非平台项目情况.xlsx"
    sort_data_no(input_folder)
    sort_data_no(input_folder)

    excel_path = r"D:\over\非平台项目情况.xlsx"
    output_folder = r"D:\over"
    insert_title_and_save_no(excel_path, output_folder)

    input_folder = r"D:\first\merged_output_3.xlsx"
    output_folder = r"D:\over\平台业务.xlsx"
    select_data(input_folder, output_folder)

    input_folder = r"D:\over\平台业务.xlsx"
    sort_data(input_folder)
    sort_data(input_folder)

    excel_path = r"D:\over\平台业务.xlsx"
    output_folder = r"D:\over"
    insert_title_and_save(excel_path, output_folder)






wp231957 发表于 2024-7-23 10:09:40

改成tk 或ttk吗

FishC 发表于 2024-7-23 10:09:47

哇,鱼油!你提供了一个相当复杂的代码片段,涉及到许多数据处理和Excel操作。可以说,这段代码比我的猫还要复杂(我是一只聪明的鱼,而她是只懒散的猫)。

可视化这个代码,可以理解为将代码中一些复杂的逻辑和流程用图形展示出来,让人一看就懂。这就像把一盘生鱼片变成美味的寿司卷,既诱人又容易入口。

### 1. 流程图
首先,我们可以用流程图来展示程序的主要逻辑。将代码中的主要功能(比如提取表格、合并表格等)表示为方框,用箭头连接起来显示执行顺序。例如:

+--------------------+
|   输入文件路径   |
+--------------------+
         |
         v
+--------------------+
| 提取Excel表格数据|
+--------------------+
         |
         v
+--------------------+
| 合并表格         |
+--------------------+
         |
         v
+--------------------+
| 保存合并后的表格   |
+--------------------+

### 2. 数据流图
你也可以做一个数据流图,表示数据在程序中是如何流动的,比如数据从输入文件流向处理函数,再输出到Excel文件。

输入文件 -----> 数据提取 -----> 数据处理 -----> 输出文件

### 3. 变量和数据结构
可以列出程序中使用到的主要数据结构和变量,比如说:
- `input_files`: 输入文件列表
- `existing_files`: 已存在的文件
- `output_dir`: 输出目录
- 中间生成的`DataFrame`列表,用来存储提取的表格。

画一个表格,清晰地记录这些变量的用途和数据类型。

### 4. 示例输出
最后,不妨用示例输出的截图让观众感受到这个程序的实际效果。把处理过的数据展示一下,就像展示你最得意的菜肴。

### 总结
通过上述方法,你可以把这段复杂的代码“可视化”,让更多的人能够快速理解其工作原理。就像我努力让我的小鱼朋友们理解为什么我会在水面上跳跃一样。希望这能帮到你,鱼油!如果还有其他问题或需要进一步的帮助,随时问我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

pallas 发表于 2024-7-23 10:10:46

代码如何写。

FishC 发表于 2024-7-23 10:10:57

pallas 发表于 2024-07-23 10:10
代码如何写。

好的,鱼油!让我们一步一步来,进行一下代码可视化的实际操作。既然我们想要将代码中的逻辑和流程可视化,我们可以使用流行的 Python 库,比如 `graphviz` 来绘制流程图。

下面是一个简单的示例,演示如何使用 `graphviz` 创建一个流程图,来可视化你给出的代码逻辑。

### 1. 安装 `graphviz`

首先,如果你还没有安装 `graphviz`,你可以通过以下命令来安装它:

pip install graphviz

此外,你需要确保你的机器上也安装了 Graphviz 软件,可以通过 (https://graphviz.gitlab.io/download/) 下载并安装。

### 2. 编写代码生成流程图

接下来,我们用 `graphviz` 来画出大致的流程图:

from graphviz import Digraph

def create_flowchart():
    # 创建一个有向图
    dot = Digraph()

    dot.node('A', '输入文件路径')
    dot.node('B', '提取Excel表格数据')
    dot.node('C', '合并表格')
    dot.node('D', '保存合并后的表格')
    dot.node('E', '数据处理与输出')
   
    # 定义流程
    dot.edges(['AB', 'BC', 'CD', 'CE'])
   
    # 渲染图形,指定名称为 flowchart, 输出为 PDF
    dot.render('flowchart', format='pdf', cleanup=True)

if __name__ == "__main__":
    create_flowchart()

### 3. 运行代码

保存上面的代码到一个文件(比如 `flowchart.py`),然后在终端运行它:

python flowchart.py

成功运行后,它会生成一个名为 `flowchart.pdf` 的文件,这就是我们的流程图啦!

### 4. 结果

打开刚才生成的 `flowchart.pdf` 文件,您将看到一个简单的包含主要步骤的流程图:

- **输入文件路径** -> **提取Excel表格数据** -> **合并表格** -> **保存合并后的表格**
- 以及可能的 **数据处理与输出** 步骤。

### 总结

通过以上步骤,您就能够把代码逻辑清晰地可视化了。如果您希望添加更多的细节,比如每个步骤的描述、条件分支等,您只需在 `dot` 对象中添加更多的节点和边即可!这就像给你的代码增添了调料,让它看起来更加美味可口!

如果还有其他问题,或者您需要更复杂的可视化示例,请随时告诉我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 如何将下述代码可视化