闲与仙人扫落花 發表於 2019-9-26 14:26:00

python的openpyxl的使用笔记

<h3>openpyxl模块介绍</h3>
<p>openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。</p>
<h3>安装openpyxl模块</h3>
<p>openpyxl是一个开源项目,这里使用如下命令安装openpyxl模块</p>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">pip3 install openpyxl
</code></pre>
<h1>一.作成Excel文件</h1>
<h2>1.作成空的excel</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    <span class="token comment">#作成一个新的空的Excel
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>2.变更默认sheet页的名称</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook
    <span class="token comment">#当前打开的sheet页 wb.active
    ws <span class="token operator">= wb<span class="token punctuation">.active

    <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"WorkSheetTitle"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>3.作成含多个sheet页的Excel</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    <span class="token comment">#当前打开的sheet页 wb.active
    ws <span class="token operator">= wb<span class="token punctuation">.active

    <span class="token comment"># #更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"WorkSheetTitle"

    <span class="token comment"># 定义第二个sheet页
    ws2 <span class="token operator">= wb<span class="token punctuation">.create_sheet<span class="token punctuation">(<span class="token string">"NewWorkSheet2"<span class="token punctuation">)

    <span class="token comment"># 定义第三个sheet页
    <span class="token comment"># `0` 的设定 会将该sheet页 置于wb最前面
    ws3 <span class="token operator">= wb<span class="token punctuation">.create_sheet<span class="token punctuation">(<span class="token string">"NewWorkSheet3"<span class="token punctuation">, <span class="token number">0<span class="token punctuation">)

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>4.sheet页WS的tab颜色变更</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

   <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"WorkSheetTitle"

    <span class="token comment"># WS的tab颜色设定
    ws<span class="token punctuation">.sheet_properties<span class="token punctuation">.tabColor <span class="token operator">= <span class="token string">"1072BA"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>二.单元格赋值</h2>
<h3>1.指定坐标</h3>
<pre class="line-numberslanguage-import"><code class="importlanguage-import">
if __name__ == '__main__':
   
    wb = openpyxl.Workbook()
    ws = wb.active

    # 更改默认名称Sheet`
    ws.title = "WorkSheetTitle"

    # 给单元格赋值
    ws["A1"] = "HOGE"
    ws["B1"] = "FUGA"

    # 保存
    wb.save('example.xlsx')
</code></pre>
<h3>2.指定行列</h3>
<pre class="line-numberslanguage-import"><code class="importlanguage-import">
if __name__ == '__main__':
   
    wb = openpyxl.Workbook()
    ws = wb.active

    # 更改默认名称Sheet`
    ws.title = "WorkSheetTitle"

    # 指定行列给单元格赋值
    ws.cell(row=4, column=2, value=10)

    # 保存
    wb.save('example.xlsx')
</code></pre>
<h3>3.指定范围</h3>
<pre class="line-numberslanguage-csharp"><code class="language-csharp">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.<span class="token function">Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

   <span class="token preprocessor property"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token preprocessor property"># 指定行列给单元格赋值
    v <span class="token operator">= <span class="token number">0
    <span class="token keyword">for i <span class="token keyword">in <span class="token function">range<span class="token punctuation">(<span class="token number">1<span class="token punctuation">,<span class="token number">10<span class="token punctuation">)<span class="token punctuation">:
      <span class="token keyword">for n <span class="token keyword">in <span class="token function">range<span class="token punctuation">(<span class="token number">1<span class="token punctuation">,<span class="token number">10<span class="token punctuation">)<span class="token punctuation">:
            ws<span class="token punctuation">.<span class="token function">cell<span class="token punctuation">(row<span class="token operator">=i<span class="token punctuation">, column<span class="token operator">=n<span class="token punctuation">, <span class="token keyword">value<span class="token operator">=v<span class="token punctuation">)
            v <span class="token operator">+= <span class="token number">1

    <span class="token preprocessor property"># 保存
    wb<span class="token punctuation">.<span class="token function">save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3>4.一次输出行</h3>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token comment"># column名
column_title <span class="token operator">= <span class="token punctuation">[<span class="token string">"FirstName"<span class="token punctuation">, <span class="token string">"LastName"<span class="token punctuation">]

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
    <span class="token triple-quoted-string string">"""
    CELL放入值
    """
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># column名和値顺序放入单元格中
    rows <span class="token operator">= <span class="token punctuation">[
      column_title<span class="token punctuation">,
      <span class="token punctuation">[<span class="token string">"Tarou"<span class="token punctuation">, <span class="token string">"Tanaka"<span class="token punctuation">]<span class="token punctuation">,
      <span class="token punctuation">[<span class="token string">"Tarou"<span class="token punctuation">, <span class="token string">"Suzuki"<span class="token punctuation">]<span class="token punctuation">,
      <span class="token punctuation">[<span class="token string">"Tarou"<span class="token punctuation">, <span class="token string">"Uchiayama"<span class="token punctuation">]<span class="token punctuation">,
    <span class="token punctuation">]
    <span class="token keyword">for row <span class="token keyword">in rows<span class="token punctuation">:
      ws<span class="token punctuation">.append<span class="token punctuation">(row<span class="token punctuation">)

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="508" data-height="268"><img src="https://upload-images.jianshu.io/upload_images/14607294-8e5045b58d5d0283.png?imageMogr2/auto-orient/strip|imageView2/2/w/508/format/webp"></div>
</div>
<div class="image-caption">一次输出行运行结果</div>
</div>
<h3>5.单元格内换行</h3>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
    <span class="token triple-quoted-string string">"""
    单元格内换行
    """
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"WorkSheetTitle"

    <span class="token comment"># 单元格内换行
    ws<span class="token punctuation">[<span class="token string">'A1'<span class="token punctuation">] <span class="token operator">= <span class="token string">"A\nB\nC"
    ws<span class="token punctuation">[<span class="token string">'A1'<span class="token punctuation">]<span class="token punctuation">.alignment <span class="token operator">= openpyxl<span class="token punctuation">.styles<span class="token punctuation">.Alignment<span class="token punctuation">(wrapText<span class="token operator">=<span class="token boolean">True<span class="token punctuation">)

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="472" data-height="252"><img src="https://upload-images.jianshu.io/upload_images/14607294-f660ed5950c416df.png?imageMogr2/auto-orient/strip|imageView2/2/w/472/format/webp"></div>
</div>
<div class="image-caption">单元格内换行运行结果图</div>
</div>
<h2>三.设置单元格的style</h2>
<h4>1.style文稿</h4>
<p>https://openpyxl.readthedocs.io/en/default/styles.html#cell-styles-and-named-styles</p>
<h2>2.设置字体font</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
    <span class="token triple-quoted-string string">"""
    设置字体font
    """
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

   <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># 设置font
    font <span class="token operator">= openpyxl<span class="token punctuation">.styles<span class="token punctuation">.Font<span class="token punctuation">(
      name <span class="token operator">= <span class="token string">"宋体"<span class="token punctuation">,
      size <span class="token operator">= <span class="token number">15<span class="token punctuation">,
    <span class="token punctuation">)
    a1 <span class="token operator">= ws<span class="token punctuation">[<span class="token string">"A1"<span class="token punctuation">]
    a1<span class="token punctuation">.font <span class="token operator">= font
    a1<span class="token punctuation">.value <span class="token operator">= <span class="token string">"TEST"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>3.单元格边框border</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl
<span class="token keyword">from openpyxl<span class="token punctuation">.styles <span class="token keyword">import Border<span class="token punctuation">, Side

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
    <span class="token triple-quoted-string string">"""
    设置单元格style
    """
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    <span class="token comment"># 更改默认名称Sheet`
    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># 设置单元格border的style
    border <span class="token operator">= Border<span class="token punctuation">(
      left<span class="token operator">=Side<span class="token punctuation">(
            border_style<span class="token operator">=<span class="token string">"thin"<span class="token punctuation">,
            color<span class="token operator">=<span class="token string">"FF0000"
      <span class="token punctuation">)<span class="token punctuation">,
      right<span class="token operator">=Side<span class="token punctuation">(
            border_style<span class="token operator">=<span class="token string">"thin"<span class="token punctuation">,
            color<span class="token operator">=<span class="token string">"FF0000"
      <span class="token punctuation">)<span class="token punctuation">,
      top<span class="token operator">=Side<span class="token punctuation">(
            border_style<span class="token operator">=<span class="token string">"thin"<span class="token punctuation">,
            color<span class="token operator">=<span class="token string">"FF0000"
      <span class="token punctuation">)<span class="token punctuation">,
      bottom<span class="token operator">=Side<span class="token punctuation">(
            border_style<span class="token operator">=<span class="token string">"thin"<span class="token punctuation">,
            color<span class="token operator">=<span class="token string">"FF0000"

      <span class="token punctuation">)
    <span class="token punctuation">)
    b2 <span class="token operator">= ws<span class="token punctuation">[<span class="token string">"B2"<span class="token punctuation">]
    b2<span class="token punctuation">.border <span class="token operator">= border
    b2<span class="token punctuation">.value <span class="token operator">= <span class="token string">"TEST"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="520" data-height="240"><img src="https://upload-images.jianshu.io/upload_images/14607294-a8015c3c2605f58a.png?imageMogr2/auto-orient/strip|imageView2/2/w/520/format/webp"></div>
</div>
<div class="image-caption">单元格边框style 运行结果图</div>
</div>
<h2>4.合并单元格</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># 合并单元格
    ws<span class="token punctuation">.merge_cells<span class="token punctuation">(<span class="token string">"A1:E1"<span class="token punctuation">)
    ws<span class="token punctuation">[<span class="token string">"A1"<span class="token punctuation">] <span class="token operator">= <span class="token string">"HOGE"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="528" data-height="178"><img src="https://upload-images.jianshu.io/upload_images/14607294-5ca9391d72146b6a.png?imageMogr2/auto-orient/strip|imageView2/2/w/528/format/webp"></div>
</div>
<div class="image-caption">合并单元格 运行效果图</div>
</div>
<h2>5.单元格填充颜色</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl
<span class="token keyword">from openpyxl<span class="token punctuation">.styles <span class="token keyword">import PatternFill

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># 单元格填充颜色
    fill <span class="token operator">= PatternFill<span class="token punctuation">(fill_type<span class="token operator">=<span class="token string">'solid'<span class="token punctuation">,
                     fgColor<span class="token operator">=<span class="token string">'FFFF0000'<span class="token punctuation">)
    b2 <span class="token operator">= ws<span class="token punctuation">[<span class="token string">"B2"<span class="token punctuation">]
    b2<span class="token punctuation">.fill <span class="token operator">= fill
    b2<span class="token punctuation">.value <span class="token operator">= <span class="token string">"TEST"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="478" data-height="170"><img src="https://upload-images.jianshu.io/upload_images/14607294-afd5b5cc26d0aa96.png?imageMogr2/auto-orient/strip|imageView2/2/w/478/format/webp"></div>
</div>
<div class="image-caption">单元格填充颜色 效果图</div>
</div>
<h2>四.hyperlink超链接</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">import openpyxl

<span class="token keyword">if __name__ <span class="token operator">== <span class="token string">'__main__'<span class="token punctuation">:
   
    wb <span class="token operator">= openpyxl<span class="token punctuation">.Workbook<span class="token punctuation">(<span class="token punctuation">)
    ws <span class="token operator">= wb<span class="token punctuation">.active

    ws<span class="token punctuation">.title <span class="token operator">= <span class="token string">"worksheettitle"

    <span class="token comment"># 作成第二个sheet页 名称胃example
    ws2 <span class="token operator">= wb<span class="token punctuation">.create_sheet<span class="token punctuation">(<span class="token string">"example"<span class="token punctuation">)

    <span class="token comment"># 设置超链接 到“example”sheet页 鼠标定格在A5单元格
    ws<span class="token punctuation">[<span class="token string">"A1"<span class="token punctuation">] <span class="token operator">= <span class="token string">"Link"
    ws<span class="token punctuation">[<span class="token string">"A1"<span class="token punctuation">]<span class="token punctuation">.hyperlink <span class="token operator">= <span class="token string">"example.xlsx#example!A5"

    <span class="token comment"># 保存
    wb<span class="token punctuation">.save<span class="token punctuation">(<span class="token string">'example.xlsx'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>五.读Excel文档</h2>
<pre class="line-numberslanguage-python"><code class="language-python"><span class="token keyword">from openpyxl <span class="token keyword">import Workbook<span class="token punctuation">, load_workbook

wb <span class="token operator">= load_workbook<span class="token punctuation">(<span class="token string">'./example.xlsx'<span class="token punctuation">)
ws <span class="token operator">= wb<span class="token punctuation">.active

<span class="token keyword">for row <span class="token keyword">in ws<span class="token punctuation">:
    <span class="token keyword">for cell <span class="token keyword">in row<span class="token punctuation">:
      <span class="token keyword">print<span class="token punctuation">(cell<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<div>&nbsp;</div>
<div class="_1kCBjS">
<div class="_18vaTa">
<div class="_3BUZPB">
<div class="_2Bo4Th">&nbsp;</div>
<span class="_1LOh_5">7人点赞</span></div>
<div class="_3BUZPB">&nbsp;</div>
</div>
<div class="_18vaTa"><span class="anticon">日记本</span>
<p>&nbsp;</p>
<div class="_3BUZPB ant-dropdown-trigger">&nbsp;</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/valorchang/p/11590652.html
頁: [1]
查看完整版本: python的openpyxl的使用笔记