<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          運(yùn)營(yíng)學(xué)Python|Python&Excel聯(lián)動(dòng)(上)

          共 20694字,需瀏覽 42分鐘

           ·

          2021-09-25 21:34

          來(lái)源:簡(jiǎn)說(shuō)Python

          作者:老表


          一、寫(xiě)在前面

          目前這個(gè)系列具體安排還沒(méi)想好((fang)擱(ge)置(zi)了好久),主要是圍繞Python自動(dòng)化辦公展開(kāi),至少包括Python對(duì)Excel、World、Txt等文件/數(shù)據(jù)處理、Python對(duì)系統(tǒng)文件處理、Python自動(dòng)發(fā)送郵件、Python數(shù)據(jù)爬取、Python模擬點(diǎn)擊登錄、Python數(shù)據(jù)可視化等方面。

          希望讀者朋友也能從自己平時(shí)工作中提取一些實(shí)際需求,我也會(huì)幫助大家利用Python解決問(wèn)題、優(yōu)化工作流程、提升工作效率,加到本系列中。

          本系列第一篇為:運(yùn)營(yíng)學(xué)Python|一文搞定編碼環(huán)境

          本系列第二篇應(yīng)該是Python基礎(chǔ)知識(shí)的,正好之前有相關(guān)文章,大家可以前往學(xué)習(xí):

          Python小知識(shí)匯總篇,全網(wǎng)2w+閱讀

          搞定Python的幾個(gè)常用數(shù)據(jù)結(jié)構(gòu)!

          今天這篇文章我們來(lái)講講如何通過(guò)Python玩轉(zhuǎn)Excel,本次分為上、中、下,上主要是打基礎(chǔ),全文1.2w+字,文中有一些為了演示講解相關(guān)功能的案例,還有三個(gè)相對(duì)完整的小實(shí)戰(zhàn)練習(xí),希望對(duì)大家了解xlwings有所幫助。

          中和下主要是給大家分享其他庫(kù)操作excel,將以實(shí)戰(zhàn)為主,所以這里也希望大家多多提一些實(shí)際需求給我(涉及數(shù)據(jù)記得脫敏),提問(wèn)通道:瀏覽器訪問(wèn)下方鏈接或者點(diǎn)擊閱讀原文:

          https://shimowendang.com/forms/tHrYqQGtRvV9vR3P/fill?channel=wc

          由于本人水平有限,文中錯(cuò)誤,敬請(qǐng)指出,互相學(xué)習(xí),一起進(jìn)步。

          二、基礎(chǔ)準(zhǔn)備

          • 環(huán)境:python 3.7+
          • 需要安裝第三方模塊:xlwings
          • 運(yùn)行編輯器:jupyter notebook

          三、動(dòng)手動(dòng)腦

          3.0 我們?yōu)槭裁匆獙W(xué)編程

          首先和大家簡(jiǎn)單聊一下運(yùn)營(yíng)(這里運(yùn)營(yíng)不單單指?jìng)鹘y(tǒng)意義上的運(yùn)營(yíng)工作者,其實(shí)只有工作場(chǎng)景中有經(jīng)常用到office等辦公軟件,處理很多數(shù)據(jù)的都算)為什么要學(xué)習(xí)編程了?

          站在我個(gè)人角度簡(jiǎn)單聊聊:

          • 運(yùn)營(yíng)學(xué)編程絕不是為了解決上面這種簡(jiǎn)單 單一的問(wèn)題
          • 我們希望的是通過(guò)編程提高工作效率、優(yōu)化工作流程
          • 比如:批量處理excel文件(可能是1000或者更多行數(shù)據(jù)的增刪改)

          3.1 環(huán)境準(zhǔn)備

          首先需要你的電腦安裝好了Python環(huán)境,并且安裝好了Python開(kāi)發(fā)工具。

          如果你還沒(méi)有安裝,可以參考以下文章:

          如果僅用Python來(lái)處理數(shù)據(jù)、爬蟲(chóng)、數(shù)據(jù)分析或者自動(dòng)化腳本、機(jī)器學(xué)習(xí)等,建議使用Python基礎(chǔ)環(huán)境+jupyter即可,安裝使用參考Windows/Mac 安裝、使用Python環(huán)境+jupyter notebook

          如果想利用Python進(jìn)行web項(xiàng)目開(kāi)發(fā)等,建議使用Python基礎(chǔ)環(huán)境+Pycharm,安裝使用參考 :Windows下安裝、使用Pycharm教程,這下全了Mac下玩轉(zhuǎn)Python-安裝&使用Python/PyCharm

          3.2 模塊安裝

          本次實(shí)驗(yàn)是在jupyter notebook上進(jìn)行,默認(rèn)你已經(jīng)安裝好了Python基本環(huán)境和jupyter,如果沒(méi)有安裝可以看上面的環(huán)境安裝部分。

          首先打開(kāi)終端,輸入:

          jupyter notebook

          即可進(jìn)入jupyter,會(huì)自動(dòng)連接服務(wù)器,并跳轉(zhuǎn)到網(wǎng)頁(yè),新建一個(gè)python文件。給文件重命名,容易區(qū)分:

          在代碼塊中輸入以下指令并運(yùn)行,即可安裝 xlwings(連接操作excel表格模塊):

          !pip3 install xlwings --user

          3.3 模塊基本介紹與使用

          xlwings
          基本介紹:用于Python與Excel之間的交互,可以輕松地從 Excel 調(diào)用 Python,也可以利用Python自動(dòng)化操作Excel,調(diào)用VBA,非常方便。

          項(xiàng)目地址:https://github.com/xlwings/xlwings

          基本使用方法:新建一個(gè)excel文件,取名為xlwings_wb.xlsx,并新建一個(gè)sheet,取名為first_sht,在其A1單元格內(nèi)插入字符串簡(jiǎn)說(shuō)Python

          # 導(dǎo)入xlwings,并起一個(gè)別名 xw,方便操作
          import xlwings as xw

          # 1、創(chuàng)建一個(gè)app應(yīng)用,打開(kāi)Excel程序
          # visible=True 表示打開(kāi)操作Excel過(guò)程可見(jiàn) 初次接觸可以設(shè)置為T(mén)rue,了解其過(guò)程
          # add_book=False 表示啟動(dòng)app后不用新建個(gè)工作簿
          app = xw.App(visible=True, add_book=False)

          # 2、新建一個(gè)工作簿
          wb = app.books.add()

          # 3、新建一個(gè)sheet,并操作
          # 3.1 新建sheet 起名為first_sht
          sht = wb.sheets.add('first_sht')
          # 3.2 在新建的sheet表中A1位置插入一個(gè)值:簡(jiǎn)說(shuō)Python
          sht.range('A1').value = '簡(jiǎn)說(shuō)Python'
          # 3.3 保存新建的工作簿,并起一個(gè)名字
          wb.save('xlwings_wb.xlsx')

          # 4、關(guān)閉工作簿
          wb.close()

          # 5、程序運(yùn)行結(jié)束,退出Excel程序
          app.quit()

          通過(guò)簡(jiǎn)單五步,我們就可以完成新建一個(gè)excel,并向其中指定sheet中的指定位置輸入值了。

          四、xlwings模塊實(shí)戰(zhàn)

          4.1 基礎(chǔ)語(yǔ)法一覽

          • 導(dǎo)包
          # 基礎(chǔ)導(dǎo)入包
          import xlwings as xw  # 程序第一步
          • 打開(kāi)關(guān)閉Excel程序(理解成excel軟件打開(kāi)、關(guān)閉)
          # visible=True 表示打開(kāi)操作Excel過(guò)程可見(jiàn) 初次接觸可以設(shè)置為T(mén)rue,了解其過(guò)程
          # add_book=False 表示啟動(dòng)app后不用新建個(gè)工作簿
          app = xw.App(visible=True, add_book=False)  # 程序第二步

          # 關(guān)閉excel程序
          app.close()  # 程序最后一步
          • 工作簿相關(guān)操作(理解成excel文件)
          # 1、新建一個(gè)工作簿
          wb = app.books.add()  # 程序第三步

          # 2、保存新建的工作簿,并起一個(gè)名字
          # 程序倒數(shù)第三步,非常關(guān)鍵,保存操作數(shù)據(jù)結(jié)果
          wb.save('xlwings_wb.xlsx')  


          # 3、打開(kāi)一個(gè)已經(jīng)存在的工作簿
          wb = app.books.open('xlwings_wb.xlsx')  # 程序第三步

          # 4、關(guān)閉工作簿
          wb.close()  # 程序倒數(shù)第二步
          • sheet相關(guān)操作(理解成工作表)
          # 在工作簿中新建一個(gè)sheet,起名為 second_sht
          sht1 = wb.sheets.add('second_sht')

          # 選中已經(jīng)存在的sheet
          sht2 = wb.sheets('first_sht')

          # 也可以通過(guò)索引選擇已存在的sheet
          sht3 = wb.sheets[0]  # 選中工作簿中的第一個(gè)sheet

          # 獲取工作簿中工作表的個(gè)數(shù)
          sht_nums = wb.sheets.count
          print('工作簿中的sheet個(gè)數(shù)為:%d'% sht_nums)

          # 當(dāng)前工作表名字
          sht1.name

          # 獲取指定sheet中數(shù)據(jù)的行數(shù)
          sht1.used_range.last_cell.row

          # 獲取指定sheet中數(shù)據(jù)的列數(shù)
          sht1.used_range.last_cell.column

          # 刪除指定的sheet 比如刪除:first_sht
          wb.sheets('first_sht').delete()
          • 單元格相關(guān)操作(就是excel單元格子)
          '''
          寫(xiě)入
          '''

          # 在工作表中指定位置插入數(shù)據(jù)
          sht1.range('B1').value = '簡(jiǎn)說(shuō)Python'

          # 在工作表指定位置插入多個(gè)數(shù)據(jù) 默認(rèn)是橫向插入
          sht1.range('B2').value = [1234]

          # 在工作表指定位置豎向插入多個(gè)數(shù)據(jù)
          # 設(shè)置options(transpose=True),transpose=True表示轉(zhuǎn)置的意思
          sht1.range('B3').options(transpose=True).value = ['老表''老表Pro''老表Max''老表Mini']

          # 在工作表指定位置開(kāi)始插入多行數(shù)據(jù)
          sht1.range('B7').value = [['a''b'], ['c''d']]

          # 在工作表指定位置開(kāi)始插入多列數(shù)據(jù)
          sht1.range('B9').options(transpose=True).value = [['a''b'], ['c''d']]

          # 向單元格寫(xiě)入公式
          sht1.range('F2').formula = '=sum(B2:E2)'
          '''
          讀取
          '''

          # 在工作表中讀取指定位置數(shù)據(jù)
          print('單元格B1=', sht1.range('B1').value)

          # 在工作表中讀取指定區(qū)域數(shù)據(jù) 一行
          print('單元格B2:F2=', sht1.range('B2:F2').value)

          # 在工作表中讀取指定區(qū)域數(shù)據(jù) 一列
          print('單元格B3:B6=', sht1.range('B3:B6').value)

          # 在工作表中讀取指定區(qū)域數(shù)據(jù) 一個(gè)區(qū)域 
          # 設(shè)置options(transpose=True)就可以按列讀 不設(shè)置就是按行讀
          print('單元格B7:C10=', sht1.range('B7:C10').options(transpose=True).value)
          '''
          刪除
          '''

          # 刪除指定單元格中的數(shù)據(jù)
          sht1.range('B10').clear()

          # 刪除指定范圍內(nèi)單元格數(shù)據(jù) 
          sht1.range('B7:B9').clear()
          '''
          格式修改
          '''

          # 選中已經(jīng)存在的sheet
          sht1 = wb.sheets('second_sht')
          # 返回單元格絕對(duì)路徑
          sht1.range('B3').get_address()
          # sht1.range('B3').address

          # 合并單元格B3 C3
          sht1.range('B3:C3').api.merge() 

          # 解除合并單元格B3 C3
          sht1.range('B3:C3').api.unmerge() 

          # 向指定單元格添加帶超鏈接文本 
          # address- 超連接地址
          # text_to_display- 超鏈接文本內(nèi)容
          # screen_tip- 鼠標(biāo)放到超鏈接上后顯示提示內(nèi)容
          sht1.range('C2').add_hyperlink(address='https://pythonbrief.blog.csdn.net/',
                             text_to_display='簡(jiǎn)說(shuō)Python CSDN博客',
                             screen_tip='點(diǎn)擊查看簡(jiǎn)說(shuō)Python CSDN博客')
                             
          # 獲取指定單元格的超鏈接地址
          sht1.range('C2').hyperlink

          # 自動(dòng)調(diào)試指定單元格高度和寬度
          sht1.range('B1').autofit()

          # 設(shè)置指定單元格背景顏色
          sht1.range('B1').color = (93,199,221)

          # 返回指定范圍內(nèi)的中第一列的編號(hào) 數(shù)字,如:A-1 B-2
          sht1.range('A2:B2').column

          # 獲取或者設(shè)置行高/列寬 
          # row_height/column_width會(huì)返回行高/列寬 ,范圍內(nèi)行高/列寬不一致會(huì)返回None
          # 也可以設(shè)置一個(gè)新的行高/列寬
          sht1.range('A2').row_height = 25
          sht1.range('B2').column_width = 20

          在windows上可以使用以下方法設(shè)置單元格文字顏色等格式,如下:

          # windows系統(tǒng)下字體設(shè)置在 sheet.range().api.Font下
          # 顏色
          sht1.range('A1').api.Font.Color = (255,0,124)
          # 字體名字
          sht1.range('A1').api.Font.Name = '宋體'
          # 字體大小
          sht1.range('A1').api.Font.Size = 28
          # 是否加粗
          sht1.range('A1').api.Font.Bold = True
          # 數(shù)字格式
          sht1.range('A1').api.NumberFormat = '0.0'
          # -4108 水平居中
          # -4131 靠左
          # -4152 靠右
          sht1.range('A1').api.HorizontalAlignment = -4108
          # -4108 垂直居中(默認(rèn))
          # -4160 靠上
          # -4107 靠下
          # -4130 自動(dòng)換行對(duì)齊。
          sht1.range('A1').api.VerticalAlignment = -4130
          # 設(shè)置上邊框線風(fēng)格和粗細(xì)
          sht1.range('A1').api.Borders(8).LineStyle = 5
          sht1.range('A1').api.Borders(8).Weight = 3
          ...

          在mac下可以通過(guò)以下方法設(shè)置字體格式:

          # 設(shè)置單元格的字體顏色
          rgb_tuple = (010200)
          sht1.range('B1').api.font_object.color.set(rgb_tuple)

          # 獲取指定單元格字體顏色
          sht1.range('B1').api.font_object.color.get()

          # 獲取指定單元格字體名字 可以使用set方法修改字體 set('宋體')
          sht1.range('B1').api.font_object.name.get()

          # 設(shè)置指定單元格字體格式 可以用get方法查看單元格字體格式
          sht1.range('B3').api.font_object.font_style.set('加粗')

          # 設(shè)置指定單元格字體大小
          sht1.range('B3').api.font_object.font_size.set(20)

          # 設(shè)置邊框線粗細(xì)
          sht1.range('B2').api.get_border(which_border=9).weight.set(4)

          # 設(shè)置邊框線風(fēng)格
          sht1.range('B2').api.get_border(which_border=9).line_style.set(8)
          ...

          再次提醒,進(jìn)行完所有操作后一定要記得執(zhí)行以下三句:

          # 保存新建的工作簿,并起一個(gè)名字(如果已存在有名字的excel文件,就直接save即可)
          wb.save()
          # 關(guān)閉工作簿(關(guān)閉Excel文件)
          wb.close()
          # 程序運(yùn)行結(jié)束,退出Excel程序
          app.quit()
          • 自動(dòng)生成統(tǒng)計(jì)圖
          import xlwings as xw

          # 新建一個(gè)sheet
          app = xw.App(visible=True, add_book=False)
          wb = app.books.open('xlwings_wb.xlsx')
          sht3 = wb.sheets.add('third_sht')

          import pandas as pd
          import numpy as np

          # 生成模擬數(shù)據(jù)
          df = pd.DataFrame({
              'money':np.random.randint(4550, size = [120])[0],
          },
              index=pd.date_range('2021-02-01''2021-02-20'),  # 行索引和時(shí)間相關(guān)
          )
          df.index.name = '消費(fèi)日期'  # 設(shè)置索引名字

          sht3.range('A1').value = df

          # 生成圖表
          chart1 = sht3.charts.add()  # 創(chuàng)建一個(gè)圖表對(duì)象
          chart1.set_source_data(sht3.range('A1').expand())  # 加載數(shù)據(jù)
          chart1.chart_type = 'line'  # 設(shè)置圖標(biāo)類(lèi)型
          chart1.top = sht3.range('D2').top  
          chart1.left = sht3.range('D2').left  # 設(shè)置圖標(biāo)開(kāi)始位置 

          除了繪制折線圖,我們還可以繪制其他類(lèi)型的圖,修改chart_type值即可。

          # 查看其他chart_types值
          xw.constants.chart_types

          返回結(jié)果,感興趣的讀者朋友可以自己試試~

          ('3d_area',
           '3d_area_stacked',
           '3d_area_stacked_100',
           '3d_bar_clustered',
           '3d_bar_stacked',
           '3d_bar_stacked_100',
           '3d_column',
           '3d_column_clustered',
           '3d_column_stacked',
           '3d_column_stacked_100',
           '3d_line',  # 3D折線圖
           '3d_pie'# 3D餅圖
           '3d_pie_exploded',
           'area',  # 面積圖
           'area_stacked',
           'area_stacked_100',
           'bar_clustered',  # 柱狀圖相關(guān)
           'bar_of_pie',
           'bar_stacked',
           'bar_stacked_100',
           'bubble',  # 氣泡圖
           'bubble_3d_effect',
           'column_clustered',  # 條形圖相關(guān)
           'column_stacked',
           'column_stacked_100',
           'combination',
           'cone_bar_clustered',
           'cone_bar_stacked',
           'cone_bar_stacked_100',
           'cone_col',
           'cone_col_clustered',
           'cone_col_stacked',
           'cone_col_stacked_100',
           'cylinder_bar_clustered',
           'cylinder_bar_stacked',
           'cylinder_bar_stacked_100',
           'cylinder_col',
           'cylinder_col_clustered',
           'cylinder_col_stacked',
           'cylinder_col_stacked_100',
           'doughnut',
           'doughnut_exploded',
           'line',  # 折線圖
           'line_markers',
           'line_markers_stacked',
           'line_markers_stacked_100',
           'line_stacked',
           'line_stacked_100',
           'pie',
           'pie_exploded',
           'pie_of_pie',
           'pyramid_bar_clustered',
           'pyramid_bar_stacked',
           'pyramid_bar_stacked_100',
           'pyramid_col',
           'pyramid_col_clustered',
           'pyramid_col_stacked',
           'pyramid_col_stacked_100',
           'radar',
           'radar_filled',
           'radar_markers',
           'stock_hlc',  # 有意思 股票K線圖
           'stock_ohlc',
           'stock_vhlc',
           'stock_vohlc',
           'surface',
           'surface_top_view',
           'surface_top_view_wireframe',
           'surface_wireframe',
           'xy_scatter',
           'xy_scatter_lines',
           'xy_scatter_lines_no_markers',
           'xy_scatter_smooth',
           'xy_scatter_smooth_no_markers')
          • 將本地圖片或者matplotlib圖片保存到excel
          '''
          matplotlib 生成的圖片存入excel
          '''

          import matplotlib.pyplot as plt
          # 隨便繪制一個(gè)餅圖
          fig1 = plt.figure()  # 先創(chuàng)建一個(gè)圖像對(duì)象
          plt.pie([0.50.30.2],  # 值
                  labels=['a''b''c'],  # 標(biāo)簽
                  explode=(00.20),  # (爆裂)距離
                  autopct='%1.1f%%',   # 顯示百分?jǐn)?shù)格式
                  shadow=True)  # 是否顯示陰影
          plt.show() 

          # 將餅圖添加到excel指定位置 J17為圖片開(kāi)始位置
          sht3.pictures.add(fig1, name='matplotlib'
                            left=sht3.range('J17').left, 
                            top=sht3.range('J17').top, update=True)
          '''
          本地圖片存入excel
          '''

          # 將本地圖片添加到excel指定位置 J1為圖片開(kāi)始位置
          pic_path = './0923.jpeg'
          sht3.pictures.add(pic_path, name='local'
                            left=sht3.range('J1').left, 
                            top=sht3.range('J1').top, update=True)

          4.2 實(shí)戰(zhàn)練習(xí)一:將消費(fèi)數(shù)據(jù)可視化生成帶平均線的趨勢(shì)圖,存入excel

          '''
          實(shí)戰(zhàn)練習(xí)一:將消費(fèi)數(shù)據(jù)可視化生成帶平均線的趨勢(shì)圖,存入excel
          數(shù)據(jù)就是之前生成的模擬數(shù)據(jù)
          '''

          import matplotlib.pyplot as plt

          fig, ax = plt.subplots()  # 創(chuàng)建一個(gè)畫(huà)板
          # 生成一條新線- 平均消費(fèi)數(shù)據(jù)
          money_m = [df['money'].mean(axis=0for i in range(len(df['money']))]
          # 建一條線:消費(fèi)趨勢(shì)折線圖
          ax.plot(df.index, df['money'], color='#f16a0b', label='每日消費(fèi)')
          # 再建一條線:平均消費(fèi)直線圖
          ax.plot(df.index, money_m, linestyle='--', color='#301502', label='平均消費(fèi)')
          # 設(shè)置橫縱坐標(biāo)基礎(chǔ)說(shuō)明
          ax.set_xlabel(u'日期'
          ax.set_ylabel(u'消費(fèi)金額/元'
          ax.set_title(u'消費(fèi)折線圖')  
          # 設(shè)置x軸值顯示方向
          plt.setp(ax.get_xticklabels(), rotation=70, horizontalalignment='right')
          # 添加圖例(label說(shuō)明到圖片上) loc設(shè)置顯示位置
          ax.legend(loc=2
          plt.show()
          sht3.pictures.add(fig, name='消費(fèi)情況'
                            left=sht3.range('J1').left, 
                            top=sht3.range('J1').top, update=True)

          4.3 實(shí)戰(zhàn)練習(xí)二:將基金數(shù)據(jù)以指定的格式存儲(chǔ)到excel并生成基金凈值走勢(shì)圖

          • 新建一個(gè)sheet,然后獲取數(shù)據(jù)
          '''
          實(shí)戰(zhàn)練習(xí)二:將股票數(shù)據(jù)以指定的格式存儲(chǔ)到excel并生成股票走勢(shì)圖
          利用akshare爬取上證指數(shù)數(shù)據(jù) 代號(hào):sh000001
          '''

          import akshare as ak
          import xlwings as xw

          # -1、新建一個(gè)sheet
          app = xw.App(visible=True, add_book=False)
          wb = app.books.open('xlwings_wb.xlsx')
          sz_sht = wb.sheets.add('sz_sht')  # 第一次新建
          # sz_sht = wb.sheets['sz_sht']  # 已經(jīng)存在,直接打開(kāi)

          # 獲取數(shù)據(jù) open high low close volume index-date
          # volume 是成交量 多少股
          # 0、獲取數(shù)據(jù)
          sz_index = ak.stock_zh_index_daily(symbol="sh000001")
          sz_index
          • 處理并存儲(chǔ)數(shù)據(jù)到excel
          # 1、處理下數(shù)據(jù)
          sz_data = sz_index['20210101':'20210922'].iloc[:,0:4]  # 只取今年數(shù)據(jù) ohlc
          sz_data.index = sz_data.index.strftime('%m-%d'# 將索引日期格式改為 月-日

          # 2、存儲(chǔ)數(shù)據(jù)
          sz_sht.range('A1').value = sz_data
          • 處理表格中數(shù)據(jù)格式
          # 3、處理數(shù)據(jù)格式
          # - 表頭字體 格式加粗 背景顏色
          sz_sht.range('A1:E1').api.font_object.name.set('Calibri')
          sz_sht.range('A1:E1').api.font_object.font_style.set('加粗')
          sz_sht.range('A1:E1').api.font_object.color.set((255255255))
          # 背景顏色
          sz_sht.range('A1:E1').color = (16156245
          # mac上居中未實(shí)現(xiàn),有了解的小伙伴可以留言指出下,感謝
          # sz_sht.range('B1').api.font_object.horizontalalignment = xw.constants.Constants.xlCenter

          # - 添加邊框
          # 1 左+內(nèi)部豎線  
          sz_sht.range('A1:E177').api.get_border(which_border=1).weight.set(2)
          # 10 最右側(cè)豎線
          sz_sht.range('A1:E177').api.get_border(which_border=10).weight.set(2)
          # 3 上+內(nèi)部橫線
          sz_sht.range('A1:E177').api.get_border(which_border=3).weight.set(2)
          # 9 最下面橫線
          sz_sht.range('A1:E177').api.get_border(which_border=9).weight.set(2)
          • 生成ohlc k線圖并存儲(chǔ)到excel指定位置
          # 4、生成圖表
          chart_ohlc = sz_sht.charts.add()  # 創(chuàng)建一個(gè)圖表對(duì)象
          chart_ohlc.set_source_data(sz_sht.range('A1').expand())  # 加載數(shù)據(jù)
          chart_ohlc.chart_type = 'stock_ohlc'  # 設(shè)置圖標(biāo)類(lèi)型
          chart_ohlc.top = sz_sht.range('G2').top  
          chart_ohlc.left = sz_sht.range('G2').left  # 設(shè)置圖標(biāo)開(kāi)始位置 

          4.4 實(shí)戰(zhàn)練習(xí)三:將基金數(shù)據(jù)以指定的格式存儲(chǔ)到excel并生成基金凈值走勢(shì)圖

          • 創(chuàng)建一個(gè)新的sheet&獲取數(shù)據(jù)
          '''
          實(shí)戰(zhàn)練習(xí)三:將基金數(shù)據(jù)以指定的格式存儲(chǔ)到excel并生成基金凈值走勢(shì)圖
          利用akshare爬取易方達(dá)藍(lán)籌基金數(shù)據(jù) 基金代號(hào):005827
          '''

          import akshare as ak
          import matplotlib.pyplot as plt
          import xlwings as xw

          # 1、新建一個(gè)sheet&獲取數(shù)據(jù)
          app = xw.App(visible=True, add_book=False)
          wb = app.books.open('xlwings_wb.xlsx')
          # sht_fund = wb.sheets.add('fund_sht')
          sht_fund = wb.sheets['fund_sht']

          # 凈值日期 單位凈值 日增長(zhǎng)率
          yfd_fund = ak.fund_em_open_fund_info(fund="005827", indicator="單位凈值走勢(shì)")
          • 數(shù)據(jù)處理&存儲(chǔ)數(shù)據(jù)
          # 2、數(shù)據(jù)處理 
          yfd_fund['單位凈值'] = yfd_fund['單位凈值'].astype(float)
          yfd_fund = yfd_fund.round(4)  # 數(shù)值列只保留4位小數(shù)

          # 3、存儲(chǔ)數(shù)據(jù)
          sht_fund.range('A1').value = yfd_fund
          # 存儲(chǔ)后發(fā)現(xiàn)有索引列,刪除(也可以在數(shù)據(jù)處理時(shí)處理)
          sht_fund.range('A:A').delete()
          • 設(shè)置數(shù)據(jù)格式
          # 4、設(shè)置數(shù)據(jù)格式
          # - 表頭字體 格式加粗 背景顏色
          sht_fund.range('A1:C1').api.font_object.name.set('Calibri')
          sht_fund.range('A1:C1').api.font_object.font_style.set('加粗')
          sht_fund.range('A1:C1').api.font_object.color.set((255255255))
          # 背景顏色
          sht_fund.range('A1:C1').color = (16156245
          # mac上居中未實(shí)現(xiàn),有了解的小伙伴可以留言指出下,感謝
          # sht_fund.range('B1').api.font_object.horizontalalignment = xw.constants.Constants.xlCenter

          # - 添加邊框 設(shè)置的時(shí)候多加一行一列,這樣就可以兩步設(shè)置好邊框了
          # 1 左+內(nèi)部豎線  
          sht_fund.range('A1:D717').api.get_border(which_border=1).weight.set(2)
          # 3 上+內(nèi)部橫線
          sht_fund.range('A1:C718').api.get_border(which_border=3).weight.set(2)
          • 利用matplotlib畫(huà)圖存儲(chǔ)
          # 5、繪制圖片
          fig, ax = plt.subplots(21, figsize=(2020), dpi=100)  #2行 1列

          # 生成一條新線- 平均消費(fèi)數(shù)據(jù)
          yfd_fund_m = [yfd_fund['單位凈值'].mean(axis=0for i in range(len(yfd_fund['單位凈值']))]
          # 圖一
          # 建一條線:基金趨勢(shì)折線圖
          ax[0].plot(yfd_fund['凈值日期'], yfd_fund['單位凈值'], color='#a5ea37', label='單位凈值')
          # 再建一條線:平均消費(fèi)直線圖
          ax[0].plot(yfd_fund['凈值日期'], yfd_fund_m, linestyle='--', color='#F91860', label='平均凈值')
          # 設(shè)置橫縱坐標(biāo)基礎(chǔ)說(shuō)明
          ax[0].set_xlabel(u'日期'
          ax[0].set_ylabel(u'單位凈值/元'
          ax[0].set_title(u'易方達(dá)基金凈值走勢(shì)圖')  
          # 添加圖例(label說(shuō)明到圖片上) loc設(shè)置顯示位置
          ax[0].legend(loc=2

          # 圖二
          # 建一條線:平均消費(fèi)直線圖
          ax[1].plot(yfd_fund['凈值日期'], yfd_fund['日增長(zhǎng)率'], color='#F9181c', label='日增長(zhǎng)率')
          # 設(shè)置橫縱坐標(biāo)基礎(chǔ)說(shuō)明
          ax[1].set_xlabel(u'日期'
          ax[1].set_ylabel(u'日增長(zhǎng)率/%'
          ax[1].set_title(u'易方達(dá)基金日增長(zhǎng)率走勢(shì)圖'
          # 添加圖例(label說(shuō)明到圖片上) loc設(shè)置顯示位置
          ax[1].legend(loc=2)

          # 設(shè)置x軸值顯示方向
          plt.setp(ax[0].get_xticklabels(), rotation=70, horizontalalignment='right')
          plt.setp(ax[1].get_xticklabels(), rotation=70, horizontalalignment='right')

          plt.show()
          sht_fund.pictures.add(fig, name='易方達(dá)基金數(shù)據(jù)'
                            left=sht_fund.range('E2').left, 
                            top=sht_fund.range('E2').top, update=True)

          再次提醒,進(jìn)行完所有操作后一定要記得執(zhí)行以下三句:

          # 保存新建的工作簿,并起一個(gè)名字(如果已存在有名字的excel文件,就直接save即可)
          wb.save()
          # 關(guān)閉工作簿(關(guān)閉Excel文件)
          wb.close()
          # 程序運(yùn)行結(jié)束,退出Excel程序
          app.quit()

          五、xlwings模塊進(jìn)階實(shí)戰(zhàn)

          這個(gè)實(shí)戰(zhàn)來(lái)自一個(gè)讀者需求,雖然已經(jīng)是一周后了,希望對(duì)大家學(xué)習(xí)xlwings有所幫助。

          需求分析:輸入一個(gè)搜索詞/值,返回該搜索詞/值所在的行列,如果不存在就返回:不存在。

          技術(shù)分析:(標(biāo)題起的高深)xlwings和vba聯(lián)動(dòng)

          操作思路:

          • 直接通過(guò)Python編寫(xiě)代碼,利用xlwings中cell的find函數(shù)進(jìn)行查找
          • 編寫(xiě)一個(gè)vba宏函數(shù),然后利用Python調(diào)用vba函數(shù)進(jìn)行查找

          這篇文章肝太久了,最后實(shí)戰(zhàn)部分我們下回見(jiàn),由于本人水平有限,文中錯(cuò)誤,敬請(qǐng)指出,互相學(xué)習(xí),一起進(jìn)步。

          覺(jué)得文章有用的朋友,記得點(diǎn)贊、轉(zhuǎn)發(fā)、留言三連支持下,感謝。


          --End--


          文章點(diǎn)贊超過(guò)100+

          我將在個(gè)人視頻號(hào)直播(老表Max)

          帶大家一起進(jìn)行項(xiàng)目實(shí)戰(zhàn)復(fù)現(xiàn)


              

          掃碼即可加我微信

          老表朋友圈經(jīng)常有贈(zèng)書(shū)/紅包福利活動(dòng)

               
          點(diǎn)擊上方卡片關(guān)注公眾號(hào),回復(fù):1024
          領(lǐng)取最新Python學(xué)習(xí)資源

                           
          學(xué)習(xí)更多:
          整理了我開(kāi)始分享學(xué)習(xí)筆記到現(xiàn)在超過(guò)250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲(chóng)、機(jī)器學(xué)習(xí)等方面,別再說(shuō)不知道該從哪開(kāi)始,實(shí)戰(zhàn)哪里找了
          點(diǎn)贊”就是對(duì)博主最大的支持 
          瀏覽 85
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          小白學(xué)運(yùn)營(yíng)
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文无码熟妇人妻 | 电影黄色一级片 | 美国少妇xxxx内射 | 欧美日韩亚洲中文字幕 | 久久机热这里只有精品 |