web-dev-qa-db-ja.com

OpenPyxlでセルに境界線を適用する

Openpyxlを使用してセルに境界線を適用しようとしていますが、最も基本的な「任意のセルに任意の種類の境界線を適用する」タスクに失敗しました。 Openpyxlのドキュメント( http://pythonhosted.org/openpyxl/styles.html#introduction )のデフォルトのスタイルからコピーして変更してみましたが、

"TypeError:init()が予期しないキーワード引数 'superscript'を取得しました"

私はここで別の例を直接コピーしようとしました( openpyxlで範囲内のすべてのセルに境界線を適用 )が、それは私に与えます

AttributeError:タイプオブジェクト 'Border'に属性 'BORDER_THIN'がありません

(タイプミスとインポート不足のエラーを修正した後でも)。

Python 3.3およびOpenPyxl 2.0.4を使用して境界線を適用する方法を知っている人はいますか?私が探しているのは、コードのスニペットで、それをコピーして空白のスクリプトに貼り付けた場合、ブック内の任意のセルの周りに境界線を置きます。

14
user2961794

Openpyxlバージョン2.2.5では、次のスニペットが機能します。

from openpyxl.styles.borders import Border, Side
from openpyxl import Workbook

thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))

wb = Workbook()
ws = wb.get_active_sheet()
# property cell.border should be used instead of cell.style.border
ws.cell(row=3, column=2).border = thin_border
wb.save('border_test.xlsx')

ドキュメントではスタイル属性の他の値について言及しています

値は{'double'、 'dashed'、 'thin'、 'medium'、 'mediumDashDot'、 'dashDot'、 'thick'、 'mediumDashed'、 'hair'、 'dotted'、 'slantDashDot'、 'mediumDashDotDot'、 'dashDotDot'}

25
takasu

Openpyxlバージョン2.0.4では、次のスニペットが機能します。

from openpyxl.styles.borders import Border, Side
from openpyxl.styles import Style
from openpyxl import Workbook

thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))
my_style = Style(border=thin_border)

wb = Workbook()
ws = wb.get_active_sheet()
ws.cell(row=3, column=2).style = my_style
wb.save('border_test.xlsx')
8
FriendFX

この回答はバージョン2.4.8で機能します。前の2つの回答との違いは、Sideのプロパティがborder_styleであることです、スタイルではありません

from openpyxl.styles.borders import Border, Side, BORDER_THIN
thin_border = Border(
    left=Side(border_style=BORDER_THIN, color='00000000'),
    right=Side(border_style=BORDER_THIN, color='00000000'),
    top=Side(border_style=BORDER_THIN, color='00000000'),
    bottom=Side(border_style=BORDER_THIN, color='00000000')
)
ws.cell(row=3, column=2).border = thin_border

スタイルの操作: https://openpyxl.readthedocs.io/en/2.5/styles.html

4
makkasi