0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonでエクセル、パワポ、メモ

Posted at

ChatGPTに聞きながらまた色々サンプル作成

●複数のcsvをxlsxにまとめるサンプル
●pptxを読み込んで適当にダンプ
●pptx作成サンプル

●複数のcsvをxlsxにまとめるサンプル

test_openpyex_csv2xlsx.py
import glob
import csv
from openpyxl import Workbook
from openpyxl.styles import Border, Side
import math
# 新しいWorkbookを作成
wb = Workbook()

# 罫線のスタイルを定義
thin_border = Border(left=Side(style='thin'),
                     right=Side(style='thin'),
                     top=Side(style='thin'),
                     bottom=Side(style='thin'))

# CSVファイルのパスを取得
csv_files = glob.glob("./csv/t_csv*.csv")

# 各CSVファイルに対して処理を行う
for csv_file in csv_files:
    # CSVファイル名をシート名として使用
    sheet_name = csv_file.split('/')[-1].replace('.csv', '')
    
    # 新しいシートを作成
    sheet = wb.create_sheet(title=sheet_name.replace("/","_").replace(".","").replace("\\","_"))
    
    # CSVファイルを読み込む
    #df = pd.read_csv(csv_file, header=None)
    with open(csv_file, newline='', encoding='utf-8') as file:
        reader = csv.reader(file)
        # リストにデータを格納
        data = list(reader)
    
    # データをセルに挿入
    dt_r_max = 0
    dt_c_max = 0
    for r_idx, row in enumerate(data):
        for c_idx, value in enumerate(row):
            cell = sheet.cell(row=r_idx + 1, column=c_idx + 1, value=value)
            
            if  len(str(cell.value)) > 0 :
               print(len(str(cell.value)),cell.value,type(cell.value))
               if dt_r_max <= r_idx :
                  dt_r_max = r_idx
               if dt_c_max <= c_idx :
                  dt_c_max = c_idx
    for r_idx in range(dt_r_max +1) :
       for c_idx in range(dt_c_max+1 ) :
            #print(r_idx,c_idx)
            cell = sheet.cell(row=r_idx +1, column=c_idx+1 )
            # 罫線を設定
            cell.border = thin_border

# デフォルトのシート(最初に作成されたシート)を削除
if 'Sheet' in wb.sheetnames:
    del wb['Sheet']

# ファイルを保存
wb.save("example_openpyex_csv2cell.xlsx")

●pptxを読み込んで適当にダンプ

ppt_make_pydump.py
from pptx import Presentation
from pptx.util import Inches
from pptx.dml.color import RGBColor
		
# プレゼンテーションの読み込み
prs = Presentation("presentation.pptx")
#左上原点

# 各オブジェクトの情報をダンプ
for slide_number, slide in enumerate(prs.slides, start=1):
    print(f"Slide {slide_number}:")
    
    for shape in slide.shapes:
        # 座標とサイズの取得
        left = shape.left
        top = shape.top
        width = shape.width
        height = shape.height

        if hasattr(shape, "text"):
            print(f"  Shape Type: {shape.shape_type}, Text: '{shape.text}'")
            print(f"    Position: (left: {left}, top: {top}), Size: (width: {width}, height: {height})")
            if shape.has_text_frame:
                for paragraph in shape.text_frame.paragraphs:
                    # フォント情報を取得
                    font_size = paragraph.font.size
                    is_bold = paragraph.font.bold
                    color = paragraph.font.color

                    # 色のチェックを例外処理で行う
                    try:
                        color_value = color.rgb if color else "No color set"
                    except AttributeError:
                        color_value = "No color set"

                    print(f"      Text: '{paragraph.text}', Font Size: {font_size}, Bold: {is_bold}, Color: {color_value}")

        if shape.shape_type == 19:  # テーブルの場合
            for row in shape.table.rows:
                for cell in row.cells:
                    print(f"    Table Cell: '{cell.text}'")
                    for paragraph in cell.text_frame.paragraphs:
                        font_size = paragraph.font.size
                        color = paragraph.font.color

                        # 色のチェックを例外処理で行う
                        try:
                            color_value = color.rgb if color else "No color set"
                        except AttributeError:
                            color_value = "No color set"

                        print(f"      Text: '{paragraph.text}', Font Size: {font_size}, Color: {color_value}")
						
        print()  # 空行で区切り

●pptx作成サンプル
参考URL:www.shibutan-bloomers.com/python-libraly-pptx-2/1024/

ppt_make_py_out.py
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.util import Inches


def center_shape_on_slide(prs, shape):
    # スライドの幅と高さを取得
    slide_width = prs.slide_width
    slide_height = prs.slide_height

    # オブジェクトの幅と高さを取得
    shape_width = shape.width
    shape_height = shape.height

    # 新しい位置を計算
    left = int((slide_width - shape_width) / 2)
    top = int((slide_height - shape_height) / 2)

    # 位置を設定
    shape.left = left
    shape.top = top
#enddef

# プレゼンテーションの作成
prs = Presentation()

# スライドの追加
slide = prs.slides.add_slide(prs.slide_layouts[5])  # 空白のスライド

# テキストボックスの追加
textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(5), Inches(1))
text_frame = textbox.text_frame
p = text_frame.add_paragraph()
p.text = "これはテキストボックス"
p.font.bold = True
p.font.size = Pt(20)
p.font.color.rgb = RGBColor(255, 0, 0)  # 赤色


# 四角形の追加
shape = slide.shapes.add_shape(
    1,  # msoShapeRectangle
    Inches(1), Inches(2), Inches(5), Inches(1)
)
shape.text = "これは図形の四角形"
text_frame = shape.text_frame
p = text_frame.paragraphs[0]
p.font.bold = True
p.font.size = Pt(18)
p.font.color.rgb = RGBColor(0, 0, 255)  # 青色

# テーブルの追加
rows, cols = 5, 5
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(3), Inches(5), Inches(2)).table

# テーブルのセルにテキストを追加
for row in range(rows):
    for col in range(cols):
        cell = table.cell(row, col)
        cell.text = f"{row+1}-{col+1}"
        for p in cell.text_frame.paragraphs:
            p.font.size = Pt(12)
            p.font.color.rgb = RGBColor(0, 128, 0)  # 緑色

# スライドの追加
slide = prs.slides.add_slide(prs.slide_layouts[5])  # 空白のスライド

# 1つ目のテキストボックス
textbox1 = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(5), Inches(1))
textbox1.text = "ひとつめのテキストボックス"

# 2つ目のテキストボックス(赤色の枠)
textbox2 = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(5), Inches(1))
textbox2.text = "ふたつめのてきすとぼっくす"
textbox2.line.color.rgb = RGBColor(255, 0, 0)  # 赤色の枠
textbox2.line.width = Pt(2)                     # 枠線の幅を2ポイントに設定

# 3つ目のテキストボックス(青色で枠内塗りつぶし)
textbox3 = slide.shapes.add_textbox(Inches(1), Inches(3), Inches(5), Inches(1))
textbox3.text = "みっつめのてきすと"
textbox3.fill.solid()                            # 塗りつぶしを設定
textbox3.fill.fore_color.rgb = RGBColor(0, 0, 255)  # 青色で塗りつぶし

# 4つ目のテキストボックス(青い色の枠、黄色で塗りつぶし)
textbox4 = slide.shapes.add_textbox(Inches(1), Inches(4), Inches(5), Inches(1))
textbox4.text = "4つめ"
textbox4.line.color.rgb = RGBColor(0, 0, 255)   # 青色の枠
textbox4.line.width = Pt(2)                     # 枠線の幅を2ポイントに設定
textbox4.fill.solid()                            # 塗りつぶしを設定
textbox4.fill.fore_color.rgb = RGBColor(255, 255, 0)  # 黄色で塗りつぶし


# スライドの追加
slide = prs.slides.add_slide(prs.slide_layouts[5])  # 空白のスライド

# テーブルの作成
rows, cols = 4, 4
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(1), Inches(5), Inches(3)).table

# センタリング関数を呼び出し
center_shape_on_slide(prs,slide.shapes[-1])

# テーブルのスタイル設定
for row in range(rows):
    for col in range(cols):
        cell = table.cell(row, col)
        cell.fill.solid()  # 塗りつぶ
        #cell.fill.fore_color.rgb = RGBColor(255, 255, 255)  # 白色

        # 3-3のセルだけ黄色で塗りつぶし
        if row == 2 and col == 2:  # 3行3列目(インデックスは0始まり)
            cell.fill.solid()
            cell.fill.fore_color.rgb = RGBColor(255, 255, 0)  # 黄色
			
			
# プレゼンテーションを保存
prs.save("presentation.pptx")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?