【办公类-99-04】20250504闵豆统计表excle转PDF,合并PDF、添加中文字体页眉+边框下划线

需求说明

督导检查,各条线都要收集资料。

今天去加班,遇到家教主任,她让我用保教主任的彩色打印机打印这套活跃度表格。(2023学年上学期下学期-2024学年上学期,就是202309-202504)

每个excle都是内容在A4一页竖版上

打印预览(在A4一页上)

存在问题:

但是一共有18个表格,如果我要手动一个个打开打印,容易少打(需要检查才能知道少打那一页)、错页(需要手动排序)。还要花时间关闭。

在现在这个争分夺秒补资料的时期,一个个表格打印实在是太烦了。

解决思路

前期我用星火讯飞问过excle是否可以保存PDF,代码没有运行成功。所以这次我用豆包问问excle是否可以保存PDF

问题1:excle转PDF

问题1的解决代码

'''
20250504闵豆EXCLE转pdf
豆包、阿夏
20250504
'''
import os
import win32com.client as win32def convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path):try:# 创建 Excel 应用程序对象excel = win32.gencache.EnsureDispatch('Excel.Application')# 使 Excel 应用程序可见(可选,有助于调试)excel.Visible = True# 打开 Excel 文件workbook = excel.Workbooks.Open(xlsx_file_path)# 保存所有工作表为一个 PDFworkbook.ExportAsFixedFormat(0, pdf_file_path)# 关闭工作簿和 Excel 应用程序workbook.Close(SaveChanges=False)excel.Quit()print(f"成功将 {xlsx_file_path} 转换为 {pdf_file_path}")except Exception as e:print(f"转换 {xlsx_file_path} 时出错: {e}")def main():path = r'C:\Users\jg2yXRZ\OneDrive\桌面\EXCEL表格打印'# 定义源文件夹路径source_folder = path + r'\00合并'# 定义目标文件夹路径target_folder = path + r'\01pdf'# 检查源文件夹是否存在if not os.path.exists(source_folder):print(f"源文件夹 {source_folder} 不存在。")return# 如果目标文件夹不存在,则创建它if not os.path.exists(target_folder):os.makedirs(target_folder)# 遍历源文件夹中的所有文件for root, dirs, files in os.walk(source_folder):for file in files:if file.endswith(('.xlsx', '.xls')):xlsx_file_path = os.path.join(root, file)pdf_file_name = os.path.splitext(file)[0] + '.pdf'pdf_file_path = os.path.join(target_folder, pdf_file_name)convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path)if __name__ == "__main__":main()

五分钟就出现了excel转pdf的效果(要用win32才保留原来的格式)

问题2:缺少页眉

很快就发现这套excel没有页眉,如果要做资料,这套excle也要有“学校”的页眉

第1次尝试,豆包

'''
20250504闵豆EXCLE转pdf,加页眉
豆包、阿夏
20250504
'''import os
import win32com.client as win32
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inchdef convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path):try:# 创建 Excel 应用程序对象excel = win32.gencache.EnsureDispatch('Excel.Application')# 使 Excel 应用程序可见(可选,有助于调试)excel.Visible = True# 打开 Excel 文件workbook = excel.Workbooks.Open(xlsx_file_path)# 保存所有工作表为一个 PDFworkbook.ExportAsFixedFormat(0, pdf_file_path)# 关闭工作簿和 Excel 应用程序workbook.Close(SaveChanges=False)excel.Quit()print(f"成功将 {xlsx_file_path} 转换为 {pdf_file_path}")except Exception as e:print(f"转换 {xlsx_file_path} 时出错: {e}")def create_cover_page_with_header(pdf_path):c = canvas.Canvas(pdf_path, pagesize=letter)# 设置字体和字号c.setFont('Helvetica', 12)# 页眉文本header_text = "111111"# 计算文本宽度text_width = c.stringWidth(header_text, 'Helvetica', 12)# 页眉位置(居中)x = (letter[0] - text_width) / 2y = letter[1] - 0.5 * inch# 绘制页眉文本c.drawString(x, y, header_text)# 绘制页眉下方的段落框线c.line(0.5 * inch, y - 2, letter[0] - 0.5 * inch, y - 2)c.save()def merge_pdfs(source_folder, output_pdf):pdf_writer = PdfWriter()# 遍历源文件夹中的所有 PDF 文件for root, dirs, files in os.walk(source_folder):for file in sorted(files):if file.endswith('.pdf'):pdf_path = os.path.join(root, file)pdf_reader = PdfReader(pdf_path)for page in pdf_reader.pages:pdf_writer.add_page(page)# 创建带有页眉的封面页cover_pdf_path = 'cover_with_header.pdf'create_cover_page_with_header(cover_pdf_path)cover_pdf_reader = PdfReader(cover_pdf_path)# 将封面页添加到合并后的 PDF 开头pdf_writer.insert_page(cover_pdf_reader.pages[0], 0)# 保存合并后的 PDFwith open(output_pdf, 'wb') as out:pdf_writer.write(out)print(f"成功将 {source_folder} 中的所有 PDF 合并为 {output_pdf}")# 删除临时封面页 PDFos.remove(cover_pdf_path)def main():path = r'C:\Users\jg2yXRZ\OneDrive\桌面\EXCEL表格打印'# 定义源文件夹路径source_folder = path + r'\00合并'# 定义目标文件夹路径target_folder = path + r'\01pdf'# 定义合并后的 PDF 输出路径merged_pdf_path = path + r'\merged_pdfs.pdf'# 检查源文件夹是否存在if not os.path.exists(source_folder):print(f"源文件夹 {source_folder} 不存在。")return# 如果目标文件夹不存在,则创建它if not os.path.exists(target_folder):os.makedirs(target_folder)# 遍历源文件夹中的所有文件for root, dirs, files in os.walk(source_folder):for file in files:if file.endswith(('.xlsx', '.xls')):xlsx_file_path = os.path.join(root, file)pdf_file_name = os.path.splitext(file)[0] + '.pdf'pdf_file_path = os.path.join(target_folder, pdf_file_name)convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path)# 合并目标文件夹中的所有 PDF 文件merge_pdfs(target_folder, merged_pdf_path)if __name__ == "__main__":main()

结果:新建一页空白,添加了页眉,后面的每页统计表pdf都没有加到页眉

换了一个思路问豆包,结果还是一样的,只有第一页加了页眉

第2次尝试,deepseek

import fitz  # PyMuPDFdef add_header_with_border(input_pdf, output_pdf, header_text):doc = fitz.open(input_pdf)for page in doc:# 获取页面尺寸page_rect = page.rectwidth = page_rect.width# 创建页眉矩形区域 (顶部2cm高)header_rect = fitz.Rect(0, 0, width, 50)# 添加下划线边框 (1pt粗)page.draw_rect(header_rect, color=(0, 0, 0), width=1)# 在边框下方添加一条细线作为下划线page.draw_line(fitz.Point(0, 48), fitz.Point(width, 48), color=(0, 0, 0), width=0.5)# 添加页眉文本 (居中)text = header_textfont_size = 12text_rect = fitz.Rect(0, 10, width, 30)page.insert_textbox(text_rect,text,fontsize=font_size,fontname="helv",color=(0, 0, 0),align=1  # 1=居中)doc.save(output_pdf)doc.close()# 使用示例
add_header_with_border("input.pdf", "output.pdf", "这是页眉文字")

把这个代码和之前的excle转PDF 合并一起

很幸运这个写出来代码运行成功了,但是页眉是?号(非汉字),而且画了一整个黑框。

继续调整问题

这次每页PDF都有页码了,不过下划线在页眉的上面

最后问一次

正确代码

'''
20250504闵豆EXCLE转pdf,加页眉+下划线
豆包、阿夏
20250504
'''
import os
import win32com.client as win32
from PyPDF2 import PdfReader, PdfWriter
import fitz  # PyMuPDFdef convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path):"""将Excel文件转换为PDF"""try:excel = win32.gencache.EnsureDispatch('Excel.Application')excel.Visible = Falseworkbook = excel.Workbooks.Open(xlsx_file_path)workbook.ExportAsFixedFormat(0, pdf_file_path)workbook.Close(SaveChanges=False)excel.Quit()print(f"成功将 {xlsx_file_path} 转换为 {pdf_file_path}")return Trueexcept Exception as e:print(f"转换 {xlsx_file_path} 时出错: {e}")return Falsedef add_header_to_pdf(input_pdf, output_pdf, header_text):"""为PDF添加页眉(文字+下方下划线)"""try:doc = fitz.open(input_pdf)for page in doc:# 获取页面尺寸page_rect = page.rectwidth = page_rect.widthleft_margin = 50  # 左边距right_margin = width - 50  # 右边距# 先添加页眉文本 (居中)text = header_textfont_size = 12text_rect = fitz.Rect(0, 20, width, 40)  # 文本区域# 插入文本并获取文本高度text_height = page.insert_textbox(text_rect,text,fontsize=font_size,fontname="helv",color=(0, 0, 0),align=1  # 1=居中)# 在文本下方添加下划线# 计算下划线位置(文本底部+2pt)underline_y = 20 + (40 - 20 - text_height) + 2page.draw_line(fitz.Point(left_margin, underline_y),fitz.Point(right_margin, underline_y),color=(0, 0, 0),width=0.8  # 线宽)doc.save(output_pdf)doc.close()print(f"成功为 {input_pdf} 添加页眉")return Trueexcept Exception as e:print(f"为 {input_pdf} 添加页眉时出错: {e}")return Falsedef merge_pdfs(source_folder, output_pdf):"""合并所有PDF文件"""try:pdf_writer = PdfWriter()# 按文件名排序添加所有PDF文件pdf_files = sorted([f for f in os.listdir(source_folder) if f.endswith('.pdf')])for pdf_file in pdf_files:pdf_path = os.path.join(source_folder, pdf_file)pdf_reader = PdfReader(pdf_path)for page in pdf_reader.pages:pdf_writer.add_page(page)# 保存合并后的PDFwith open(output_pdf, 'wb') as out:pdf_writer.write(out)print(f"成功合并所有PDF为 {output_pdf}")return Trueexcept Exception as e:print(f"合并PDF时出错: {e}")return Falsedef process_all_files(source_folder, target_folder, merged_pdf_path, header_text):"""处理所有文件:转换、添加页眉、合并"""if not os.path.exists(source_folder):print(f"源文件夹 {source_folder} 不存在。")return Falseos.makedirs(target_folder, exist_ok=True)for root, dirs, files in os.walk(source_folder):for file in files:if file.endswith(('.xlsx', '.xls')):xlsx_path = os.path.join(root, file)pdf_name = os.path.splitext(file)[0] + '.pdf'pdf_path = os.path.join(target_folder, pdf_name)if convert_xlsx_to_pdf(xlsx_path, pdf_path):temp_pdf = os.path.join(target_folder, f"temp_{pdf_name}")if add_header_to_pdf(pdf_path, temp_pdf, header_text):os.remove(pdf_path)os.rename(temp_pdf, pdf_path)return merge_pdfs(target_folder, merged_pdf_path)def main():base_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\EXCEL表格打印'source_folder = os.path.join(base_path, '00合并')target_folder = os.path.join(base_path, '01pdf')merged_pdf_path = os.path.join(base_path, 'merged_pdfs.pdf')header_text = "上海市XX区XX幼儿园"  # 页眉文本process_all_files(source_folder, target_folder, merged_pdf_path, header_text)if __name__ == "__main__":main()

汉字不显示

如果是数字、字母,可以显示

继续修改

中间又用豆包、智谱清言写了十几次都不成功。其中提到

  1. 替代方案

    • 如果fitz库无法解决问题,可以考虑使用其他库,如ReportLabWeasyPrint,这些库对中文支持较好。

感觉fitz识别汉字很差。考虑试试reportlab和WeasyPrint识别汉字能力好。

最后把可以显示数字页眉的代码贴入deepseek,加了ReportLab的提示,就像xlsx转pdf时要求必须用win32转

终于成功了

'''
20250504 闵豆EXCEL转PDF,加页眉(汉字中文、英文、字母+下划线)
豆包、智谱清言、deepseek、阿夏
20250504
'''import os
import win32com.client as win32
from PyPDF2 import PdfReader, PdfWriter
import fitz  # PyMuPDF
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import iodef convert_xlsx_to_pdf(xlsx_file_path, pdf_file_path):"""将Excel文件转换为PDF"""try:excel = win32.gencache.EnsureDispatch('Excel.Application')excel.Visible = Falseworkbook = excel.Workbooks.Open(xlsx_file_path)workbook.ExportAsFixedFormat(0, pdf_file_path)workbook.Close(SaveChanges=False)excel.Quit()print(f"成功将 {xlsx_file_path} 转换为 {pdf_file_path}")return Trueexcept Exception as e:print(f"转换 {xlsx_file_path} 时出错: {e}")return Falsedef add_header_to_pdf(input_pdf, output_pdf, header_text):"""为PDF添加页眉(使用reportlab生成带汉字的页眉)"""try:# 注册中文字体(确保字体文件存在)font_path = r'C:\Windows\Fonts\simsun.ttc'  # 宋体if not os.path.exists(font_path):font_path = r'C:\Windows\Fonts\STSONG.TTF'  # 备用路径if not os.path.exists(font_path):print("❌ 错误:未找到宋体字体文件!")return Falsepdfmetrics.registerFont(TTFont('SimSun', font_path))# 读取原始PDForiginal_pdf = PdfReader(input_pdf)pdf_writer = PdfWriter()for page in original_pdf.pages:# 获取页面尺寸media_box = page.mediaboxwidth = float(media_box[2])height = float(media_box[3])# 创建一个临时PDF用于页眉packet = io.BytesIO()can = canvas.Canvas(packet, pagesize=(width, height))# 设置字体和大小can.setFont('SimSun', 12)# 计算文本宽度以居中text_width = can.stringWidth(header_text, 'SimSun', 12)# 绘制页眉文本(居中)can.drawString((width - text_width) / 2, height - 20, header_text)# 绘制下划线can.line(50, height - 25, width - 50, height - 25)can.save()# 将页眉合并到原始页面packet.seek(0)header_pdf = PdfReader(packet)page.merge_page(header_pdf.pages[0])pdf_writer.add_page(page)# 保存结果with open(output_pdf, 'wb') as output_file:pdf_writer.write(output_file)print(f"✅ 成功为 {input_pdf} 添加页眉")return Trueexcept Exception as e:print(f"❌ 添加页眉时出错: {e}")return Falsedef merge_pdfs(source_folder, output_pdf):"""合并所有PDF文件"""try:pdf_writer = PdfWriter()# 按文件名排序添加所有PDF文件pdf_files = sorted([f for f in os.listdir(source_folder) if f.endswith('.pdf')])for pdf_file in pdf_files:pdf_path = os.path.join(source_folder, pdf_file)pdf_reader = PdfReader(pdf_path)for page in pdf_reader.pages:pdf_writer.add_page(page)# 保存合并后的PDFwith open(output_pdf, 'wb') as out:pdf_writer.write(out)print(f"成功合并所有PDF为 {output_pdf}")return Trueexcept Exception as e:print(f"合并PDF时出错: {e}")return Falsedef process_all_files(source_folder, target_folder, merged_pdf_path, header_text):"""处理所有文件:转换、添加页眉、合并"""if not os.path.exists(source_folder):print(f"源文件夹 {source_folder} 不存在。")return Falseos.makedirs(target_folder, exist_ok=True)for root, dirs, files in os.walk(source_folder):for file in files:if file.endswith(('.xlsx', '.xls')):xlsx_path = os.path.join(root, file)pdf_name = os.path.splitext(file)[0] + '.pdf'pdf_path = os.path.join(target_folder, pdf_name)if convert_xlsx_to_pdf(xlsx_path, pdf_path):temp_pdf = os.path.join(target_folder, f"temp_{pdf_name}")if add_header_to_pdf(pdf_path, temp_pdf, header_text):os.remove(pdf_path)os.rename(temp_pdf, pdf_path)return merge_pdfs(target_folder, merged_pdf_path)def main():base_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\EXCEL表格打印'source_folder = os.path.join(base_path, '00合并')target_folder = os.path.join(base_path, '01pdf')merged_pdf_path = os.path.join(base_path, 'merged_pdfs.pdf')header_text = "上海市CY区abc123幼儿园"  # 页眉文本(支持中文)process_all_files(source_folder, target_folder, merged_pdf_path, header_text)if __name__ == "__main__":main()

最后效果:

汉字中文、英文大写、英文小写、数字、符号都可以显示成页眉。整段下框线(下划线)也有

单页PDF的页眉

所有PDF都有页眉了

合并打印

感悟:

为了添加pdf的汉字页眉,四个AI工具,花了4个小时,太累了。还是乖乖的把EXCEL模版里面添加好页眉吧!

但是EXCEL页眉左中右,如果我设置居中显示,最多只能中间部分有下划线,不能画出左边距到右边距地一根横线

我从左边的页眉区输入学校,然后按了很多空格,的确页眉边长,有下划线了,

但是保存时提示太长,不给保存

调到正好长度(下划线不超过两端)

预览时显示制作右侧中策有下划线

在最后加一个逗号,改成白色逗号

打印时,勉强可以算左右整段下划线

算了就这样设置吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测

#工作记录 在 NVIDIA 发布 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后,开发者纷纷选择升级以获取新特性和性能提升。 CUDA Toolkit 12.9 与 cuDNN 9.9.0 发布,带来全新特性与优化-CSDN博客 然而,升级完成并不意味着大功告成,确认升级后…

LLM论文笔记 28: Universal length generalization with Turing Programs

Arxiv日期:2024.10.4机构:Harvard University 关键词 图灵机 CoT 长度泛化 核心结论 Turing Programs 的提出 提出 Turing Programs,一种基于图灵机计算步骤的通用 CoT 策略。通过将算法任务分解为逐步的“磁带更新”(类似图灵…

【全队项目】智能学术海报生成系统PosterGenius--图片布局生成模型LayoutPrompt(1)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀大模型实战训练营_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

位图的实现和拓展

一:位图的介绍 ①:需要位图的场景 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 要判断一个数是否在某一堆数中,我们可能会想到如下方法: A…

排序功法入门指南【江湖算法笔记】

话说江湖风云变幻,各路英雄好汉行走江湖,总得有个名号排行。若问“东邪西毒南帝北丐”谁强谁弱,总得排个座次不是?这排序之道,恰似武功秘籍,练好了能号令群雄,练岔了怕是要被笑掉大牙&#xff0…

【中间件】brpc_基础_用户态线程中断

bthread之用户态线程中断 源码 1 简介 interrupt_pthread 核心功能是 通过信号机制中断阻塞的 pthread 线程,以实现线程的协作式中断。 2 核心功能与设计 2.1 信号选择与注册 信号选择:使用 SIGURG 作为中断信号。 原因:SIGURG 通常用于…

Linux 的网络卡

#本机操作系统CentOS 10 #核心版本 rootbogon:/etc# uname -r 6.12.0-65.el10.x86_64 网卡能不能被捉到可以使用【dmesg|grep xx】来判断,有没有驱动则可以使用lsmod看看模块有没有加载核心!最后,以ifconfig xxx测试看看 观察核心所捉到的网卡…

前端双工通信的几种方案详细描述

前端实现双工通信(全双工或半双工)的常见方案及详细实现如下: 一、WebSocket(全双工) 原理:基于 TCP 的持久化协议,客户端与服务端建立双向通信通道,支持实时双向数据传输。 // 客…

KUKA机器人快速启动设置

KUKA机器人在首次开机启动时,有时在示教器上需要进行投入运行等相关的设置。如以下相关的信息需要处理: 1、机器人系统开机后,选择T1运行模式;2、显示提示信息:“RDC 存储器和控制系统不一致什么被更换了”时&#xf…

游戏代码C

以下将结合不同编程语言的特点及游戏开发中的实际应用,展示多种语言的游戏代码示例(以简单游戏为例,展示代码结构和逻辑差异)。由于代码篇幅较长,我将分语言进行说明并引用相关来源: 1. C# Unity&#xff…

LangChain Agent核心解析:Zero-Shot-ReAct策略实现与实战指南

引言 在LangChain的Agent框架中,zero-shot-react-description 是一种预定义的Agent类型,它结合了Zero-Shot(零样本学习) 和 ReAct(推理行动) 策略,主要用于根据工具的描述动态选择和执行工具&a…

PyQt 或 PySide6 进行 GUI 开发文档与教程

一、官网文档 Qt 官方文档:Porting to Qt 6 | Qt 6.9Qt 维基:​​​​​​​Qt WikiQt for Python (PySide6) :​​​​​​​Qt for Python - Qt WikiPySide6 快速上手指南:​​​​​​​Getting Started - Qt for Python PyS…

2024年第十五届蓝桥杯省赛B组Python【 简洁易懂题解】

2024年第十五届蓝桥杯省赛B组Python题解 一、整体情况说明 2024年第十五届蓝桥杯省赛B组Python组考试共包含8道题目,分为结果填空题和程序设计题两类。 考试时间:4小时编程环境:Python 3.x,禁止使用第三方库,仅可使…

Go语言--语法基础4--基本数据类型--类型转换

Go 是一种强类型的语言,所以如果在赋值的时候两边类型不一致会报错。一个类型的值可以被转换成另一种类型的值。由于 Go 语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。 强制类型转换语法 使用 type (a) 这种形式来进行强制类型转换&am…

nginx 代理时怎么更改 Remote Address 请求头

今天工作中遇到用 localhost 访问网站能访问后台 api,但是用本机IP地址后就拒绝访问,我怀疑是后台获取 Remote Address 然后设置白名单了只能 localhost 访问。 想用 nginx 更改 Remote Address server {listen 8058;server_name localhost;loca…

LeetCode刷题链表

文章目录 链表总结 常用技巧两数相加题解代码 两两交换链表中的节点题解代码 重排链表题解代码 合并k个升序链表题解代码 K个一组翻转链表题解代码 链表总结 常用技巧 画图 直观 形象 便于理解引入虚拟头节点,便于处理边界情况,方便我们对链表进行…

ESP32S3 多固件烧录方法、合并多个固件为单一固件方法

ESP32S3 多固件烧录方法、合并多个固件为单一固件方法 文章目录 ESP32S3 多固件烧录方法、合并多个固件为单一固件方法前言1、前期准备工作2、多固件烧录方法3、单固件烧录方法总结 前言 使用正点原子的ESP32S3 BOX开发板独立烧录编译生成的xxx.bin固件无法正常运行起来&#…

Webug4.0靶场通关笔记10- 第14关链接注入

目录 第14关 链接注入 1.打开靶场 2.源码分析 3.渗透实战 (1)方法1:跳转外部网页 (2)方法2:获取cookie 4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。 第14关 链接注入 链接注…

SpringBoot的汽车商城后台管理系统源码开发实现

概述 汽车商城后台管理系统专为汽车4S店和经销商设计,提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能: ​​销售管理​​:记录销售信息,跟踪交易进度​​客户管理​​:维护客户…

VBA代码解决方案第二十四讲:EXCEL中,如何删除重复数据行

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…