<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>

          Pandas專家總結(jié):指定樣式保存excel數(shù)據(jù)的 “N種” 姿勢(shì)!

          共 14999字,需瀏覽 30分鐘

           ·

          2021-01-07 17:10

          作者:小小明


          簡(jiǎn)介:Pandas數(shù)據(jù)處理專家,10余年編碼經(jīng)驗(yàn),至今已幫助過(guò)百名以上數(shù)據(jù)從業(yè)人員解決工作實(shí)際遇到的問(wèn)題,其中數(shù)據(jù)處理和辦公自動(dòng)化問(wèn)題涉及的行業(yè)包括會(huì)計(jì)、審計(jì)、HR、氣象工作人員、教師、律師、運(yùn)營(yíng),以及各行業(yè)的數(shù)據(jù)分析師和專做數(shù)據(jù)分析案例的公眾號(hào)號(hào)主。

          若你在數(shù)據(jù)處理的問(wèn)題上遇到什么困難,歡迎與我交流。

          擊上方“Python爬蟲(chóng)與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書(shū)籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書(shū)

          少孤為客早,多難識(shí)君遲。

          目錄

          • 準(zhǔn)備數(shù)據(jù)

          • Pandas直接保存數(shù)據(jù)

          • Pandas的Styler對(duì)表格著色輸出

          • Pandas使用xlsxwriter引擎保存數(shù)據(jù)

          • xlsxwriter按照指定樣式寫出Pandas對(duì)象的數(shù)據(jù)

          • Pandas自適應(yīng)列寬保存數(shù)據(jù)

          • 相關(guān)資料

          • 總結(jié)

          準(zhǔn)備數(shù)據(jù)

          import?pandas?as?pd
          from?datetime?import?datetime,?date
          df?=?pd.DataFrame({'Date?and?time':?[datetime(2015,?1,?1,?11,?30,?55),
          ?????????????????????????????????????datetime(2015,?1,?2,?1,?20,?33),
          ?????????????????????????????????????datetime(2015,?1,?3,?11,?10),
          ?????????????????????????????????????datetime(2015,?1,?4,?16,?45,?35),
          ?????????????????????????????????????datetime(2015,?1,?5,?12,?10,?15)],
          ???????????????????'Dates?only':?[date(2015,?2,?1),
          ??????????????????????????????????date(2015,?2,?2),
          ??????????????????????????????????date(2015,?2,?3),
          ??????????????????????????????????date(2015,?2,?4),
          ??????????????????????????????????date(2015,?2,?5)],
          ???????????????????'Numbers':?[1010,?2020,?3030,?2020,?1515],
          ???????????????????'Percentage':?[.1,?.2,?.33,?.25,?.5],
          ???????????????????})
          df['final']?=?[f"=C{i}*D{i}"?for?i?in?range(2,?df.shape[0]+2)]
          df

          結(jié)果:


          Date and timeDates onlyNumbersPercentagefinal
          02015/1/1 11:302015/2/110100.1=C2*D2
          12015/1/2 1:202015/2/220200.2=C3*D3
          22015/1/3 11:102015/2/330300.33=C4*D4
          32015/1/4 16:452015/2/420200.25=C5*D5
          42015/1/5 12:102015/2/515150.5=C6*D6

          Pandas直接保存數(shù)據(jù)

          對(duì)于這個(gè)pandas對(duì)象,如果我們需要將其保存為excel,有那些操作方式呢?首先,最簡(jiǎn)單的,直接保存:

          df.to_excel("demo1.xlsx",?sheet_name='Sheet1',?index=False)

          效果如下:

          但如果我們想要給這個(gè)excel在保存時(shí),同時(shí)指定一些特殊的自定義格式又該怎么做呢?這時(shí)就可以使用ExcelWriter進(jìn)行操作,查看API文檔發(fā)現(xiàn)兩個(gè)重要參數(shù):

          • date_format : str, default None

            Format string for dates written into Excel files (e.g. 'YYYY-MM-DD').

          • datetime_format : str, default None

            Format string for datetime objects written into Excel files. (e.g. 'YYYY-MM-DD HH:MM:SS').

          這說(shuō)明對(duì)于日期類型數(shù)據(jù),都可以通過(guò)這兩個(gè)參數(shù)指定特定的顯示格式,那么我們采用以下方式才創(chuàng)建ExcelWriter,并保存結(jié)果:

          writer?=?pd.ExcelWriter("demo1.xlsx",
          ????????????????????????datetime_format='mmm?d?yyyy?hh:mm:ss',
          ????????????????????????date_format='mmmm?dd?yyyy')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          writer.save()

          可以看到excel保存的結(jié)果中,格式已經(jīng)確實(shí)的發(fā)生了改變:

          Pandas的Styler對(duì)表格著色輸出

          如果我們想對(duì)指定的列的數(shù)據(jù)設(shè)置文字顏色或背景色,可以直接pandas.io.formats.style工具,該工具可以直接對(duì)指定列用指定的規(guī)則著色:

          df_style?=?df.style.applymap(lambda?x:?'color:red',?subset=["Date?and?time"])?\
          ????.applymap(lambda?x:?'color:green',?subset=["Dates?only"])?\
          ????.applymap(lambda?x:?'background-color:#ADD8E6',?subset=["Numbers"])?\
          ????.background_gradient(cmap="PuBu",?low=0,?high=0.5,?subset=["Percentage"])
          df_style

          顯示效果:


          writer?=?pd.ExcelWriter("demo_style.xlsx",
          ????????????????????????datetime_format='mmm?d?yyyy?hh:mm:ss',
          ????????????????????????date_format='mmmm?dd?yyyy')
          df_style.to_excel(writer,?sheet_name='Sheet1',?index=False)
          writer.save()

          保存效果:

          雖然Pandas的Styler樣式還包括設(shè)置顯示格式、條形圖等功能,但寫入到excel卻無(wú)效,所以我們只能借助Pandas的Styler實(shí)現(xiàn)作色的功能,而且只能對(duì)數(shù)據(jù)著色,不能對(duì)表頭作色。

          Pandas使用xlsxwriter引擎保存數(shù)據(jù)

          進(jìn)一步的,我們需要將數(shù)值等其他類型的數(shù)據(jù)也修改一下顯示格式,這時(shí)就需要從ExcelWriter拿出其中的workbook進(jìn)行操作:

          writer?=?pd.ExcelWriter("demo1.xlsx")
          workbook?=?writer.book
          workbook

          結(jié)果:


          從返回的結(jié)果可以看到這是一個(gè)xlsxwriter對(duì)象,說(shuō)明pandas默認(rèn)的excel寫出引擎是xlsxwriter,即上面的ExcelWriter創(chuàng)建代碼其實(shí)等價(jià)于:

          pd.ExcelWriter("demo1.xlsx",?engine='xlsxwriter')

          關(guān)于xlsxwriter可以參考官方文檔:https://xlsxwriter.readthedocs.org/

          下面的代碼即可給數(shù)值列設(shè)置特定的格式:

          writer?=?pd.ExcelWriter("demo1.xlsx",
          ????????????????????????engine='xlsxwriter',
          ????????????????????????datetime_format='mmm?d?yyyy?hh:mm:ss',
          ????????????????????????date_format='mmmm?dd?yyyy')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          workbook?=?writer.book
          worksheet?=?writer.sheets['Sheet1']

          worksheet.set_column('A:A',?19)
          worksheet.set_column('B:B',?17)

          format1?=?workbook.add_format({'num_format':?'#,##0.00'})
          format2?=?workbook.add_format({'num_format':?'0%'})
          worksheet.set_column('C:C',?8,?format1)
          worksheet.set_column('D:D',?11,?format2)
          worksheet.set_column('E:E',?6,?format1)

          writer.save()

          效果:

          關(guān)于set_column方法:

          worksheet.set_column('C:C', 8, format1) 表示將C列的列寬設(shè)置為8個(gè)字符,并采用format1的樣式,當(dāng)然 format1 = workbook.add_format({'num_format': '#,##0.00'}) 就是表示生成一個(gè)指定的格式對(duì)象。

          xlsxwriter按照指定樣式寫出Pandas對(duì)象的數(shù)據(jù)

          假如,我現(xiàn)在希望能夠定制excel表頭的樣式,并給數(shù)據(jù)添加邊框。我翻遍了xlsxwriter的API文檔發(fā)現(xiàn),并沒(méi)有一個(gè)可以修改指定范圍樣式的API,要修改樣式只能通過(guò)set_column修改列,或者通過(guò)set_row修改行,這種形式的修改都是針對(duì)整行和整列,對(duì)于顯示格式還能滿足條件,但對(duì)于背景色和邊框之類的樣式就不行了,這點(diǎn)上確實(shí)不如openpyxl方便,但xlsxwriter還有個(gè)優(yōu)勢(shì),就是寫出數(shù)據(jù)時(shí)可以直接指定樣式。

          下面看看如何直接通過(guò)xlsxwriter保存指定樣式的數(shù)據(jù)吧:

          import?xlsxwriter

          workbook?=?xlsxwriter.Workbook('demo2.xlsx')
          worksheet?=?workbook.add_worksheet('sheet1')
          #?創(chuàng)建列名的樣式
          header_format?=?workbook.add_format({
          ????'bold':?True,
          ????'text_wrap':?True,
          ????'valign':?'top',
          ????'fg_color':?'#D7E4BC',
          ????'border':?1})
          #?從A1單元格開(kāi)始寫出一行數(shù)據(jù),指定樣式為header_format
          worksheet.write_row(0,?0,??df.columns,?header_format)
          #?創(chuàng)建一批樣式對(duì)象
          format1?=?workbook.add_format({'border':?1,?'num_format':?'mmm?d?yyyy?hh:mm:ss'})
          format2?=?workbook.add_format({'border':?1,?'num_format':?'mmmm?dd?yyyy'})
          format3?=?workbook.add_format({'border':?1,?'num_format':?'#,##0.00'})
          format4?=?workbook.add_format({'border':?1,?'num_format':?'0%'})

          #?從第2行(角標(biāo)從0開(kāi)始)開(kāi)始,分別寫出每列的數(shù)據(jù),并指定特定的樣式
          worksheet.write_column(1,?0,?df.iloc[:,?0],?format1)
          worksheet.write_column(1,?1,?df.iloc[:,?1],?format2)
          worksheet.write_column(1,?2,?df.iloc[:,?2],?format3)
          worksheet.write_column(1,?3,?df.iloc[:,?3],?format4)
          worksheet.write_column(1,?4,?df.iloc[:,?4],?format3)

          #?設(shè)置對(duì)應(yīng)列的列寬,單位是字符長(zhǎng)度
          worksheet.set_column('A:A',?19)
          worksheet.set_column('B:B',?17)
          worksheet.set_column('C:C',?8)
          worksheet.set_column('D:D',?12)
          worksheet.set_column('E:E',?6)

          workbook.close()

          上面的代碼應(yīng)該都比較好理解,header_format和formatN是創(chuàng)建的樣式對(duì)象,write_row用于按行寫出數(shù)據(jù),write_column用于按列寫出數(shù)據(jù),set_column則是用于設(shè)置整列的列寬和樣式(沒(méi)傳入的不設(shè)置)。

          運(yùn)行結(jié)果如下:

          Pandas使用openpyxl引擎保存數(shù)據(jù)

          pandas的默認(rèn)寫出引擎是xlsxwriter,那么是不是可以修改為其他引擎呢?答案是可以,下面我們使用 openpyxl 實(shí)現(xiàn)同樣的效果。

          關(guān)于openpyxl可參考:https://openpyxl.readthedocs.org/

          也可以直接參考黃同學(xué)編寫的文檔(中文,相對(duì)也比較全面):https://blog.csdn.net/weixin_41261833/article/details/106028038

          writer?=?pd.ExcelWriter("demo3.xlsx",
          ????????????????????????engine='openpyxl',
          ????????????????????????datetime_format='mmm?d?yyyy?hh:mm:ss',
          ????????????????????????date_format='mmmm?dd?yyyy')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          workbook?=?writer.book
          worksheet?=?writer.sheets['Sheet1']
          workbook

          結(jié)果:


          從上述打印結(jié)果可以看到,從engine指定為'openpyxl'后,workbook已經(jīng)是 openpyxl 對(duì)象了。

          與 xlsxwriter 不同的是 openpyxl 只能對(duì)逐個(gè)單元格設(shè)置樣式,而xlsxwriter只能指定行或指定列或?qū)懭霐?shù)據(jù)指定樣式。

          下面首先修改表頭的樣式:

          import?itertools
          from?openpyxl.styles?import?Alignment,?Font,?PatternFill,?Border,?Side,?PatternFill

          font?=?Font(name="微軟雅黑",?bold=True)
          alignment?=?Alignment(vertical="top",?wrap_text=True)
          pattern_fill?=?PatternFill(fill_type="solid",?fgColor="D7E4BC")
          side?=?Side(style="thin")
          border?=?Border(left=side,?right=side,?top=side,?bottom=side)

          for?cell?in?itertools.chain(*worksheet["A1:E1"]):
          ????cell.font?=?font
          ????cell.alignment?=?alignment
          ????cell.fill?=?pattern_fill
          ????cell.border?=?border

          上述代碼引入的了itertools.chain方便迭代出每個(gè)單元格,而不用寫多重for循環(huán)。

          下面再修改數(shù)值列的格式:

          for?cell?in?itertools.chain(*worksheet["A2:E6"]):
          ????cell.border?=?border
          for?cell?in?itertools.chain(*worksheet["C2:C6"],?*worksheet["E2:E6"]):
          ????cell.number_format?=?'#,##0.00'
          for?cell?in?itertools.chain(*worksheet["D2:D6"]):
          ????cell.number_format?=?'0%'

          最后給各列設(shè)置一下列寬:

          worksheet.column_dimensions["A"].width?=?20
          worksheet.column_dimensions["B"].width?=?17
          worksheet.column_dimensions["C"].width?=?10
          worksheet.column_dimensions["D"].width?=?12
          worksheet.column_dimensions["E"].width?=?8

          最后保存即可:

          writer.save()

          整體完整代碼:

          from?openpyxl.styles?import?Alignment,?Font,?PatternFill,?Border,?Side,?PatternFill
          import?itertools

          writer?=?pd.ExcelWriter("demo3.xlsx",
          ????????????????????????engine='openpyxl',
          ????????????????????????datetime_format='mmm?d?yyyy?hh:mm:ss',
          ????????????????????????date_format='mmmm?dd?yyyy')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          workbook?=?writer.book
          worksheet?=?writer.sheets['Sheet1']

          font?=?Font(name="微軟雅黑",?bold=True)
          alignment?=?Alignment(vertical="top",?wrap_text=True)
          pattern_fill?=?PatternFill(fill_type="solid",?fgColor="D7E4BC")
          side?=?Side(style="thin")
          border?=?Border(left=side,?right=side,?top=side,?bottom=side)

          for?cell?in?itertools.chain(*worksheet["A1:E1"]):
          ????cell.font?=?font
          ????cell.alignment?=?alignment
          ????cell.fill?=?pattern_fill
          ????cell.border?=?border

          for?cell?in?itertools.chain(*worksheet["A2:E6"]):
          ????cell.border?=?border
          for?cell?in?itertools.chain(*worksheet["C2:C6"],?*worksheet["E2:E6"]):
          ????cell.number_format?=?'#,##0.00'
          for?cell?in?itertools.chain(*worksheet["D2:D6"]):
          ????cell.number_format?=?'0%'

          worksheet.column_dimensions["A"].width?=?20
          worksheet.column_dimensions["B"].width?=?17
          worksheet.column_dimensions["C"].width?=?10
          worksheet.column_dimensions["D"].width?=?12
          worksheet.column_dimensions["E"].width?=?8

          writer.save()

          最終效果:

          從上述代碼可以看到,openpyxl 修改樣式時(shí)相對(duì)xlsxwriter來(lái)說(shuō)麻煩了太多,特別是修改一個(gè)表頭就需要?jiǎng)?chuàng)建5個(gè)對(duì)象。

          openpyxl加載數(shù)據(jù)模板寫出Pandas對(duì)象的數(shù)據(jù)

          雖然 openpyxl 直接寫出數(shù)據(jù)指定樣式相對(duì)xlsxwriter麻煩,但 openpyxl 還有個(gè)巨大的優(yōu)勢(shì)就是可以讀取已有的excel文件,在其基礎(chǔ)上修改。

          那我們就完全可以先將模板數(shù)據(jù)寫入到一個(gè)excel,然后加載這個(gè)模板文件進(jìn)行修改,所以上面那個(gè)固定不變的表頭,我們就可以事先創(chuàng)建好:

          然后加載模板,再寫入:

          (經(jīng)測(cè)試ExcelWriter無(wú)法對(duì)已經(jīng)存在的工作表進(jìn)行操作,會(huì)創(chuàng)建新的工作表,所以這里直接使用openpyxl自己的API)

          from?openpyxl?import?load_workbook
          workbook?=?load_workbook('template.xlsx')
          worksheet?=?workbook["Sheet1"]
          #?添加數(shù)據(jù)列,i表示當(dāng)前的行號(hào),用于后續(xù)格式設(shè)置
          for?i,?row?in?enumerate(df.values,?2):
          ????worksheet.append(row.tolist())

          #?批量修改給寫入的數(shù)據(jù)的單元格范圍加邊框
          side?=?Side(style="thin")
          border?=?Border(left=side,?right=side,?top=side,?bottom=side)
          for?cell?in?itertools.chain(*worksheet[f"A2:E{i}"]):
          ????cell.border?=?border
          ????
          #?批量給各列設(shè)置指定的自定義格式
          for?cell?in?itertools.chain(*worksheet[f"A2:A{i}"]):
          ????cell.number_format?=?'mmm?d?yyyy?hh:mm:ss'
          for?cell?in?itertools.chain(*worksheet[f"B2:B{i}"]):
          ????cell.number_format?=?'mmmm?dd?yyyy'
          for?cell?in?itertools.chain(*worksheet[f"C2:C{i}"],?*worksheet[f"E2:E{i}"]):
          ????cell.number_format?=?'#,##0.00'
          for?cell?in?itertools.chain(*worksheet[f"D2:D{i}"]):
          ????cell.number_format?=?'0%'

          workbook.save(filename="demo4.xlsx")

          最終效果:

          可以明顯的看到openpyxl在加載模板后,可以省掉表頭設(shè)置和列寬設(shè)置的代碼。

          Pandas自適應(yīng)列寬保存數(shù)據(jù)

          大多數(shù)時(shí)候我們并不需要設(shè)置自定義樣式,也不需要寫出公式字符串,而是直接寫出最終的結(jié)果文本,這時(shí)我們就可以使用pandas計(jì)算一下各列的列寬再保存excel數(shù)據(jù)。

          例如我們有如下數(shù)據(jù):

          df?=?pd.DataFrame({
          ????'Region':?['East',?'East',?'South',?'North',?'West',?'South',?'North',?'West',?'West',?'South',?'West',?'South'],
          ????'Item':?['Apple',?'Apple',?'Orange',?'Apple',?'Apple',?'Pear',?'Pear',?'Orange',?'Grape',?'Pear',?'Grape',
          ?????????????'Orange'],
          ????'Volume':?[9000,?5000,?9000,?2000,?9000,?7000,?9000,?1000,?1000,?10000,?6000,?3000],
          ????'Month':?['July',?'July',?'September',?'November',?'November',?'October',?'August',?'December',?'November',?'April',
          ??????????????'January',?'May']
          })
          df

          結(jié)果:


          RegionItemVolumeMonth
          0EastApple9000July
          1EastApple5000July
          2SouthOrange9000September
          3NorthApple2000November
          4WestApple9000November
          5SouthPear7000October
          6NorthPear9000August
          7WestOrange1000December
          8WestGrape1000November
          9SouthPear10000April
          10WestGrape6000January
          11SouthOrange3000May

          使用pandas來(lái)進(jìn)行計(jì)算各列列寬,思路是計(jì)算出每列的字符串gbk編碼(Windows下的Excel軟件默認(rèn)使用gbk編碼)后的最大字節(jié)長(zhǎng)度:

          #??計(jì)算表頭的字符寬度
          column_widths?=?(
          ????df.columns.to_series()
          ????.apply(lambda?x:?len(x.encode('gbk'))).values
          )
          #??計(jì)算每列的最大字符寬度
          max_widths?=?(
          ????df.astype(str)
          ????.applymap(lambda?x:?len(x.encode('gbk')))
          ????.agg(max).values
          )
          #?計(jì)算整體最大寬度
          widths?=?np.max([column_widths,?max_widths],?axis=0)
          widths

          結(jié)果:

          array([6, 6, 6, 9], dtype=int64)

          下面將改造一下前面的代碼。

          首先,使用xlsxwriter引擎自適應(yīng)列寬保存數(shù)據(jù):

          writer?=?pd.ExcelWriter("auto_column_width1.xlsx",?engine='xlsxwriter')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          worksheet?=?writer.sheets['Sheet1']

          for?i,?width?in?enumerate(widths):
          ????worksheet.set_column(i,?i,?width)

          writer.save()

          然后,使用openpyxl引擎自適應(yīng)列寬保存數(shù)據(jù)(openpyxl引擎設(shè)置字符寬度時(shí)會(huì)縮水0.5左右個(gè)字符,所以干脆+1):

          from?openpyxl.utils?import?get_column_letter

          writer?=?pd.ExcelWriter("auto_column_width2.xlsx",?engine='openpyxl')
          df.to_excel(writer,?sheet_name='Sheet1',?index=False)
          worksheet?=?writer.sheets['Sheet1']

          for?i,?width?in?enumerate(widths,?1):
          ????worksheet.column_dimensions[get_column_letter(i)].width?=?width+1

          writer.save()

          結(jié)果:

          可以看到列寬設(shè)置的都比較準(zhǔn)確。

          相關(guān)資料

          1. python讀寫Excel文件的那些庫(kù)

          來(lái)源:http://www.python-excel.org/

          • openpyxl

          讀取和寫入EXCEL2010文件的包(即.xlsx)

          文檔:https://openpyxl.readthedocs.org/

          • xlsxwriter

          擁有豐富的特性,支持圖片/表格/圖表/篩選/格式/公式等,功能與openpyxl相似,優(yōu)點(diǎn)是相比 openpyxl 還支持 VBA 文件導(dǎo)入,迷你圖等功能,缺點(diǎn)是不能打開(kāi)/修改已有文件,意味著使用 xlsxwriter 需要從零開(kāi)始。支持EXCEL2010文件(即.xlsx) 文檔:https://xlsxwriter.readthedocs.org/GitHub:https://github.com/jmcnamara/XlsxWriter

          • pyxlsb

          專門用于讀取?xlsb格式的excel文件 GitHub:https://github.com/willtrnr/pyxlsb

          • pylightxl

          用于讀取xlsx?和xlsm格式的excel文件,或?qū)懭?/span>xlsx格式的excel文件 文檔:https://pylightxl.readthedocs.io/en/latest/GitHub:https://github.com/PydPiper/pylightxl

          • xlrd

          用于讀取xls格式的excel文件的庫(kù) 文檔:http://xlrd.readthedocs.io/en/latest/GitHub:https://github.com/python-excel/xlrd

          • xlwt

          用于寫入xls格式的excel文件的庫(kù) 文檔:http://xlwt.readthedocs.io/en/latest/Examples:https://github.com/python-excel/xlwt/tree/master/examplesGitHub:https://github.com/python-excel/xlwt

          • xlutils

          用于配合xlrdxlwt的工具庫(kù),包括樣式的復(fù)制 文檔:http://xlutils.readthedocs.io/en/latest/GitHub:https://github.com/python-excel/xlutils


          必須安裝 Microsoft Excel應(yīng)用程序后才能使用的庫(kù):

          • xlwings

          xlwings是開(kāi)源,用Python替代VBA自動(dòng)化操作Excel,同時(shí)支持Windows和MacOS。在Windows平臺(tái)下,通過(guò)xlwings在Python中編寫UDF可以實(shí)現(xiàn)在Excel中調(diào)用Python。xlwings PRO是一個(gè)具有附加功能的商業(yè)插件。

          主頁(yè):https://www.xlwings.org/文檔:https://docs.xlwings.org/en/stable/GitHub:https://github.com/xlwings/xlwings

          2. Excel單元格自定義格式參數(shù)含義

          一、代碼結(jié)構(gòu)組

          代碼結(jié)構(gòu)組成分為四個(gè)部分,中間用";"號(hào)分隔,具體如下:正數(shù)格式;負(fù)數(shù)格式;零格式;文本格式

          二、各個(gè)參數(shù)的含義

          1、"G/通用格式":以常規(guī)的數(shù)字顯示,相當(dāng)于"分類"列表中的"常規(guī)"選項(xiàng)。

          G/通用格式

          10顯示為10;10.1顯示為10.1。

          2、"0":數(shù)字占位符。如果單元格的內(nèi)容大于占位符,則顯示實(shí)際數(shù)字,如果小于點(diǎn)位符的數(shù)量,則用0補(bǔ)足。

          00000

          1234567顯示為1234567;123顯示為00123

          00.000

          100.14顯示為100.140;1.1顯示為01.100

          0000-00-00

          20050512顯示為2005-05-12

          3、"#":數(shù)字占位符。只顯有意義的零而不顯示無(wú)意義的零。小數(shù)點(diǎn)后數(shù)字如大于"#"的數(shù)量,則按"#"的位數(shù)四舍五入。

          ###.##

          12.1顯示為12.10;12.1263顯示為12.13

          4、"?":數(shù)字占位符。在小數(shù)點(diǎn)兩邊為無(wú)意義的零添加空格,對(duì)齊結(jié)果為以小數(shù)點(diǎn)對(duì)齊,另外還用于對(duì)不等到長(zhǎng)數(shù)字的分?jǐn)?shù)。

          ??.??

          結(jié)果自動(dòng)以小數(shù)點(diǎn)對(duì)齊:

          #??/??

          原數(shù)據(jù):

          1.25
          22.5
          43.75
          65

          展示效果:

          ?5/4?
          45/2?
          175/4?
          65/1?

          5、".":小數(shù)點(diǎn)。如果外加雙引號(hào)則為字符。

          0.#

          11.23顯示為11.2

          6、"%":百分比。

          #%

          0.1顯示為10%

          7、",":千位分隔符。數(shù)字使用千位分隔符。如在代碼中","后空,則把原來(lái)的數(shù)字縮小1000倍。

          #,###

          "10000"顯示為"10,000"

          #,

          "10000"顯示為"10"

          #,,

          "1000000"顯示為"1"

          8、"@":文本占位符。如果只使用單個(gè)@,作用是引用原始文本,要在輸入數(shù)字?jǐn)?shù)據(jù)之前自動(dòng)添加文本,使用自定義格式為:"文本內(nèi)容"@;要在輸入數(shù)字?jǐn)?shù)據(jù)之后自動(dòng)添加文本,使用自定義格式為:@"文本內(nèi)容"。@符號(hào)的位置決定了Excel輸入的數(shù)字?jǐn)?shù)據(jù)相對(duì)于添加文本的位置。如果使用多個(gè)@,則可以重復(fù)文本。

          "集團(tuán)"@"部"

          財(cái)務(wù) 顯示為:集團(tuán)財(cái)務(wù)部

          @@@

          財(cái)務(wù) 顯示為:財(cái)務(wù)財(cái)務(wù)財(cái)務(wù)

          9、*:重復(fù)下一次字符,直到充滿列寬。

          @*-

          "ABC"顯示為"ABC-------------------"(僅在office中生效,wps中無(wú)效果)

          10、[顏色]:用指定的顏色顯示字符??捎邪朔N顏色可選:紅色、黑色、黃色,綠色、白色、蘭色、青色和洋紅。

          [青色];[紅色];[黃色];[蘭色]

          顯示結(jié)果為正數(shù)為青色,負(fù)數(shù)顯示紅色,零顯示黃色,文本則顯示為蘭色

          11、[顏色N]:是調(diào)用調(diào)色板中顏色,N是0~56之間的整數(shù)。

          [顏色3]

          單元格顯示的顏色為調(diào)色板上第3種顏色。

          12、[條件]:可以單元格內(nèi)容判斷后再設(shè)置格式。條件格式化只限于使用三個(gè)條件,其中兩個(gè)條件是明確的,另個(gè)是"所有的其他"。條件要放到方括號(hào)中。必須進(jìn)行簡(jiǎn)單的比較。

          [>0]"正數(shù)";[=0]"零";"負(fù)數(shù)"

          13、"!":顯示"""。由于引號(hào)是代碼常用的符號(hào)。在單元格中是無(wú)法用"""來(lái)顯示出來(lái)"""。要想顯示出來(lái),須在前加入"!"

          #!"

          "10"顯示"10""

          #!"!"

          "10"顯示"10"""

          14、時(shí)間和日期代碼

          • "YYYY"或"YY":按四位(1900~9999)或兩位(00~99)顯示年;

          • "MM"或"M":以兩位(01~12)或一位(1~12)表示月;

          • "DD"或"D":以兩位(01~31)或一位(1-31)來(lái)表示天;

          • "YYYY-MM-DD"。2005年1月10日顯示為:"2005-01-10";

          • "YY-M-D"。2005年10月10日顯示為:"05-1-10";

          • "AAAA":日期顯示為星期;

          • "H"或"HH":以一位(0~23)或兩位(01~23)顯示小時(shí);

          • "M"或"MM":以一位(0~59)或兩位(01~59)顯示分鐘;

          • "S"或"SS":以一位(0~59)或兩位(01~59)顯示秒;

          • "HH:MM:SS":"23:1:15"顯示為"23:01:15";

          總結(jié)

          經(jīng)過(guò)上面的演示,大家應(yīng)該對(duì)openpyxlxlsxwriter都有了一個(gè)比較直觀的認(rèn)知,這兩個(gè)庫(kù)大家覺(jué)得到底哪個(gè)更方便呢?

          歡迎在下方留言或討論。

          -------------------?End?-------------------

          往期精彩文章推薦:

          1. 反爬蟲(chóng)策略手把手教你使用FastAPI來(lái)限制接口的訪問(wèn)速率

          2. 一篇文章帶你解鎖Python庫(kù)中操作系統(tǒng)級(jí)別模塊psutil

          3. 盤點(diǎn)5種基于Python生成的個(gè)性化語(yǔ)音方法

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說(shuō)一兩句吧~~

          瀏覽 104
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(pí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>
                  国产黄色一级毛片 | 欧美日韩国产中文精品字幕自在 | 亚洲在线| 在线日韩色 | 国产小说一区二区三区国产 |