{"id":99,"date":"2024-08-06T21:27:46","date_gmt":"2024-08-06T13:27:46","guid":{"rendered":"https:\/\/taupis.com\/?p=99"},"modified":"2026-08-06T21:29:38","modified_gmt":"2026-08-06T13:29:38","slug":"python%e6%89%b9%e9%87%8f%e5%af%bc%e5%87%baexcel%e8%a1%a8%e6%a0%bc%e5%b9%b6%e4%b8%94%e9%87%8d%e5%91%bd%e5%90%8d%e4%b8%ba%e5%85%b6%e4%b8%ad%e6%9f%90%e4%b8%aa%e7%9b%b8%e5%af%b9%e5%ba%94%e5%88%97%e7%9a%84","status":"publish","type":"post","link":"https:\/\/taupis.com\/?p=99","title":{"rendered":"python\u6279\u91cf\u5bfc\u51faexcel\u8868\u683c\u5e76\u4e14\u91cd\u547d\u540d\u4e3a\u5176\u4e2d\u67d0\u4e2a\u76f8\u5bf9\u5e94\u5217\u7684\u503c"},"content":{"rendered":"<p>\u4eca\u5929\u5c0f\u4f19\u4f34\u627e\u5230\u6211\u95ee\u6211\u600e\u4e48\u628a\u56fe\u7247\u6279\u91cf\u5bfc\u51fa\u6765\u5e76\u4e14\u7ed9\u4ed6\u91cd\u547d\u540d\u76f8\u5bf9\u5e94\u7684\u7f16\u7801\uff0c\u4e8e\u662f\u6211\u5c31\u60f3\u5230\u7528python\u6765\u8fdb\u884c\u6b64\u7c7b\u64cd\u4f5c\uff0c\u4e0d\u7136\u4e00\u4e2a\u4e2a\u53bb\u91cd\u547d\u540d\u548c\u5bfc\u51fa\uff0c\u5c11\u70b9\u7684\u8fd8\u597d\uff0c\u4f46\u662f\u505a\u7535\u5546\u7684\u600e\u4e48\u53ef\u80fd\u53ea\u6709\u4e00\u70b9\u70b9\u5462\uff0c\u6240\u4ee5\u5c31\u6709\u4e86\u8fd9\u4e2a\u8f6f\u4ef6\u4e0b\u9762\u6211\u653e\u4e2a\u6f14\u793a\uff0c\u6e90\u7801\u548c\u6253\u5305\u540e\u7684\u8f6f\u4ef6\u4e5f\u4f1a\u653e\u5728\u4e0b\u65b9\uff0c\u9ebb\u70e6\u770b\u4e0b\u5e7f\u544a\uff0c\u7eaf\u7cb9\u4e3a\u7231\u53d1\u7535\uff01\u8c22\u8c22\uff01\uff01<\/p>\n<p>\u8fd9\u79cd\u65b9\u5f0f\u4ec5\u652f\u6301\u56fe\u7247\u6d6e\u52a8\u65b9\u5f0f\uff0c\u5982\u679c\u662f\u5d4c\u5165\u7684\u5148\u628a\u56fe\u7247\u6539\u4e3a\u6d6e\u52a8\u518d\u7528<\/p>\n<p>&nbsp;<\/p>\n<div style=\"width: 1920px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-99-1\" width=\"1920\" height=\"1200\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132903731704.mp4?_=1\" \/><a href=\"https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132903731704.mp4\">https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132903731704.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u6e90\u7801\uff1a<\/p>\n<pre class=\"hljs-copy-wrapper\"><code class=\"language-python hljs\" data-highlighted=\"yes\"><span class=\"hljs-keyword\">import<\/span> tkinter <span class=\"hljs-keyword\">as<\/span> tk\r\n<span class=\"hljs-keyword\">from<\/span> tkinter <span class=\"hljs-keyword\">import<\/span> filedialog, messagebox, simpledialog, scrolledtext\r\n<span class=\"hljs-keyword\">from<\/span> openpyxl <span class=\"hljs-keyword\">import<\/span> load_workbook\r\n<span class=\"hljs-keyword\">from<\/span> openpyxl_image_loader <span class=\"hljs-keyword\">import<\/span> SheetImageLoader\r\n<span class=\"hljs-keyword\">import<\/span> os\r\n\r\n<span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">browse_excel_file<\/span>():\r\n    file_path = filedialog.askopenfilename(\r\n        title=<span class=\"hljs-string\">\"\u9009\u62e9Excel\u6587\u4ef6\"<\/span>,\r\n        filetypes=[(<span class=\"hljs-string\">\"Excel files\"<\/span>, <span class=\"hljs-string\">\"*.xlsx\"<\/span>)]\r\n    )\r\n    <span class=\"hljs-keyword\">if<\/span> file_path:\r\n        excel_path.<span class=\"hljs-built_in\">set<\/span>(file_path)\r\n        log_message(<span class=\"hljs-string\">\"Excel\u6587\u4ef6\u5df2\u9009\u62e9: \"<\/span> + file_path)\r\n\r\n<span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">browse_save_dir<\/span>():\r\n    directory = filedialog.askdirectory(title=<span class=\"hljs-string\">\"\u9009\u62e9\u4fdd\u5b58\u8def\u5f84\"<\/span>)\r\n    <span class=\"hljs-keyword\">if<\/span> directory:\r\n        save_dir.<span class=\"hljs-built_in\">set<\/span>(directory)\r\n        log_message(<span class=\"hljs-string\">\"\u4fdd\u5b58\u8def\u5f84\u5df2\u9009\u62e9: \"<\/span> + directory)\r\n\r\n<span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">get_sheet_name<\/span>():\r\n    sheet_name = simpledialog.askstring(<span class=\"hljs-string\">\"\u8f93\u5165\u5de5\u4f5c\u8868\u540d\u79f0\"<\/span>, <span class=\"hljs-string\">\"\u8bf7\u8f93\u5165\u5de5\u4f5c\u8868\u540d\u79f0:\"<\/span>, parent=root)\r\n    <span class=\"hljs-keyword\">if<\/span> sheet_name:\r\n        sheet_name.<span class=\"hljs-built_in\">set<\/span>(sheet_name)\r\n        log_message(<span class=\"hljs-string\">\"\u5de5\u4f5c\u8868\u540d\u79f0\u5df2\u8bbe\u7f6e\u4e3a: \"<\/span> + sheet_name)\r\n\r\n<span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">process_excel<\/span>():\r\n    <span class=\"hljs-keyword\">try<\/span>:\r\n        excel_path_val = excel_path.get()\r\n        save_dir_val = save_dir.get()\r\n        sheet_name_val = sheet_name.get()\r\n        image_column_val = image_column.get()\r\n        rename_column_val = rename_column.get()\r\n\r\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-built_in\">all<\/span>([excel_path_val, save_dir_val, sheet_name_val, image_column_val, rename_column_val]):\r\n            messagebox.showerror(<span class=\"hljs-string\">\"Error\"<\/span>, <span class=\"hljs-string\">\"\u8bf7\u586b\u5199\u6240\u6709\u5fc5\u987b\u7684\u5b57\u6bb5\"<\/span>)\r\n            <span class=\"hljs-keyword\">return<\/span>\r\n\r\n        wb = load_workbook(excel_path_val)\r\n        <span class=\"hljs-keyword\">if<\/span> sheet_name_val <span class=\"hljs-keyword\">in<\/span> wb.sheetnames:\r\n            ws = wb[sheet_name_val]\r\n            log_message(<span class=\"hljs-string\">\"\u6b63\u5728\u5904\u7406\u5de5\u4f5c\u8868: \"<\/span> + sheet_name_val)\r\n            image_loader = SheetImageLoader(ws)\r\n            num = ws.max_row\r\n\r\n            <span class=\"hljs-keyword\">for<\/span> i <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">2<\/span>, num + <span class=\"hljs-number\">1<\/span>):\r\n                name = ws[<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{rename_column_val}<\/span><span class=\"hljs-subst\">{i}<\/span>\"<\/span>].value\r\n                image = image_loader.get(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{image_column_val}<\/span><span class=\"hljs-subst\">{i}<\/span>\"<\/span>)\r\n                <span class=\"hljs-keyword\">if<\/span> image <span class=\"hljs-keyword\">and<\/span> name:\r\n                    image_format = image.<span class=\"hljs-built_in\">format<\/span>\r\n                    image.save(os.path.join(save_dir_val, <span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{name}<\/span>.<span class=\"hljs-subst\">{image_format.lower()}<\/span>\"<\/span>))\r\n                    log_message(<span class=\"hljs-string\">f\"\u56fe\u7247\u5df2\u4fdd\u5b58: <span class=\"hljs-subst\">{name}<\/span>.<span class=\"hljs-subst\">{image_format.lower()}<\/span>\"<\/span>)\r\n                <span class=\"hljs-keyword\">else<\/span>:\r\n                    log_message(<span class=\"hljs-string\">\"\u67d0\u4e9b\u884c\u53ef\u80fd\u672a\u5305\u542b\u56fe\u7247\u6216\u6587\u4ef6\u540d\"<\/span>)\r\n\r\n        <span class=\"hljs-keyword\">else<\/span>:\r\n            messagebox.showerror(<span class=\"hljs-string\">\"Error\"<\/span>, <span class=\"hljs-string\">\"\u5de5\u4f5c\u8868\u540d\u79f0\u4e0d\u6b63\u786e\"<\/span>)\r\n            log_message(<span class=\"hljs-string\">\"\u9519\u8bef: \u5de5\u4f5c\u8868\u540d\u79f0\u4e0d\u6b63\u786e\"<\/span>)\r\n\r\n    <span class=\"hljs-keyword\">except<\/span> Exception <span class=\"hljs-keyword\">as<\/span> e:\r\n        messagebox.showerror(<span class=\"hljs-string\">\"Error\"<\/span>, <span class=\"hljs-string\">f\"\u5904\u7406Excel\u65f6\u53d1\u751f\u9519\u8bef: <span class=\"hljs-subst\">{e}<\/span>\"<\/span>)\r\n        log_message(<span class=\"hljs-string\">f\"\u9519\u8bef: <span class=\"hljs-subst\">{e}<\/span>\"<\/span>)\r\n\r\n<span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">log_message<\/span>(<span class=\"hljs-params\">message<\/span>):\r\n    log_text.config(state=tk.NORMAL)\r\n    log_text.insert(tk.END, message + <span class=\"hljs-string\">\"\\n\"<\/span>)\r\n    log_text.config(state=tk.DISABLED)\r\n    log_text.yview(tk.END)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u4e3b\u7a97\u53e3<\/span>\r\nroot = tk.Tk()\r\nroot.title(<span class=\"hljs-string\">\"Excel\u56fe\u7247\u63d0\u53d6\u5668\"<\/span>)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u53d8\u91cf\u4ee5\u5b58\u50a8\u7528\u6237\u8f93\u5165<\/span>\r\nexcel_path = tk.StringVar()\r\nsave_dir = tk.StringVar()\r\nsheet_name = tk.StringVar()\r\nimage_column = tk.StringVar()\r\nrename_column = tk.StringVar()\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u65e5\u5fd7\u6587\u672c\u6846<\/span>\r\nlog_text = scrolledtext.ScrolledText(root, width=<span class=\"hljs-number\">50<\/span>, height=<span class=\"hljs-number\">10<\/span>)\r\nlog_text.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=<span class=\"hljs-literal\">True<\/span>)\r\nlog_text.config(state=tk.DISABLED)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efaExcel\u6587\u4ef6\u8def\u5f84\u533a\u57df<\/span>\r\nexcel_path_frame = tk.Frame(root)\r\nexcel_path_frame.pack(pady=<span class=\"hljs-number\">10<\/span>)\r\n\r\ntk.Label(excel_path_frame, text=<span class=\"hljs-string\">\"Excel\u6587\u4ef6\u8def\u5f84:\"<\/span>).pack(side=tk.LEFT)\r\nbrowse_excel_btn = tk.Button(excel_path_frame, text=<span class=\"hljs-string\">\"\u6d4f\u89c8...\"<\/span>, command=browse_excel_file)\r\nbrowse_excel_btn.pack(side=tk.RIGHT)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u4fdd\u5b58\u8def\u5f84\u533a\u57df<\/span>\r\nsave_dir_frame = tk.Frame(root)\r\nsave_dir_frame.pack(pady=<span class=\"hljs-number\">10<\/span>)\r\n\r\ntk.Label(save_dir_frame, text=<span class=\"hljs-string\">\"\u4fdd\u5b58\u8def\u5f84:\"<\/span>).pack(side=tk.LEFT)\r\nbrowse_save_btn = tk.Button(save_dir_frame, text=<span class=\"hljs-string\">\"\u6d4f\u89c8...\"<\/span>, command=browse_save_dir)\r\nbrowse_save_btn.pack(side=tk.RIGHT)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u5de5\u4f5c\u8868\u540d\u79f0\u533a\u57df<\/span>\r\nsheet_name_frame = tk.Frame(root)\r\nsheet_name_frame.pack(pady=<span class=\"hljs-number\">10<\/span>)\r\n\r\ntk.Label(sheet_name_frame, text=<span class=\"hljs-string\">\"\u5de5\u4f5c\u8868\u540d\u79f0:\"<\/span>).pack(side=tk.LEFT)\r\nsheet_name_entry = tk.Entry(sheet_name_frame, textvariable=sheet_name)\r\nsheet_name_entry.pack(side=tk.RIGHT, expand=<span class=\"hljs-literal\">True<\/span>, fill=tk.X)\r\n\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u5217\u9009\u62e9\u533a\u57df<\/span>\r\nimage_column_frame = tk.Frame(root)\r\nimage_column_frame.pack(pady=<span class=\"hljs-number\">10<\/span>)\r\n\r\ntk.Label(image_column_frame, text=<span class=\"hljs-string\">\"\u56fe\u7247\u6240\u5728\u5217(\u5982: C):\"<\/span>).pack(side=tk.LEFT)\r\nimage_column_entry = tk.Entry(image_column_frame, textvariable=image_column, width=<span class=\"hljs-number\">10<\/span>)\r\nimage_column_entry.pack(side=tk.RIGHT)\r\n\r\nrename_column_frame = tk.Frame(root)\r\nrename_column_frame.pack(pady=<span class=\"hljs-number\">10<\/span>)\r\n\r\ntk.Label(rename_column_frame, text=<span class=\"hljs-string\">\"\u91cd\u547d\u540d\u503c\u6240\u5728\u5217(\u5982: E):\"<\/span>).pack(side=tk.LEFT)\r\nrename_column_entry = tk.Entry(rename_column_frame, textvariable=rename_column, width=<span class=\"hljs-number\">10<\/span>)\r\nrename_column_entry.pack(side=tk.RIGHT)\r\n\r\n<span class=\"hljs-comment\"># \u521b\u5efa\u5904\u7406\u6309\u94ae<\/span>\r\nprocess_btn = tk.Button(root, text=<span class=\"hljs-string\">\"Excel! \u542f\u52a8\uff01\uff01\uff01\"<\/span>, command=process_excel)\r\nprocess_btn.pack(pady=<span class=\"hljs-number\">20<\/span>)\r\n\r\n<span class=\"hljs-comment\"># \u542f\u52a8\u4e8b\u4ef6\u5faa\u73af<\/span>\r\nroot.mainloop()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u5929\u5c0f\u4f19\u4f34\u627e\u5230\u6211\u95ee\u6211\u600e\u4e48\u628a\u56fe\u7247\u6279\u91cf\u5bfc\u51fa\u6765\u5e76\u4e14\u7ed9\u4ed6\u91cd\u547d\u540d\u76f8\u5bf9\u5e94\u7684\u7f16\u7801\uff0c\u4e8e\u662f\u6211\u5c31\u60f3\u5230\u7528python\u6765\u8fdb\u884c\u6b64\u7c7b\u64cd\u4f5c\uff0c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":87,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[13],"class_list":["post-99","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python"],"_links":{"self":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/99","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=99"}],"version-history":[{"count":1,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/99\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/99\/revisions\/101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/media\/87"}],"wp:attachment":[{"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=99"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=99"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=99"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}