0
0

More than 3 years have passed since last update.

wxPython + openpyxl で Excelににほんの少し似たソフトを作ってみる

Posted at

何をつくるか

Excelに似たソフトといっても、セルの書式とかシートとかはどうでもよく、ただ文字列の読書きができるような
本当にいらないソフトです。
数値でも文字列と認識しちゃうし、セルのサイズとか結合とかもどうでもよっくなっています。

ソースコード

wxPython・openpyxlをまだインストールしていない場合はインストールしてください。

excel.py
import sys
import wx
import wx.lib.scrolledpanel as scrolled
import openpyxl

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"Excel(大嘘)")
        panel = scrolled.ScrolledPanel(self,-1,size=wx.Size(self.GetSize()[0],self.GetSize()[1]))
        panel.SetupScrolling()
        self.textctrls = []
        self.c = 10
        self.r = 20
        for col in range(self.c):
            for row in range(self.r):
                self.textctrls.append(wx.TextCtrl(panel,-1,""))
        sizer = wx.FlexGridSizer(self.r,self.c,1,1)
        for ctrl in self.textctrls:
            sizer.Add(ctrl)
        panel.SetSizer(sizer)

        MenuBar = wx.MenuBar()
        FileMenu = wx.Menu()
        FileMenu.Append(1,"開く...")
        FileMenu.Append(2,"保存...")
        FileMenu.AppendSeparator()
        FileMenu.Append(3,"終了")
        MenuBar.Append(FileMenu,"ファイル")
        self.SetMenuBar(MenuBar)
        self.Bind(wx.EVT_MENU,self.SelectMenuBar)
    def SelectMenuBar(self,event):
        ID = event.GetId()
        if ID == 1:
            #Excelファイルを開く
            dialog = wx.FileDialog(self,"Excelファイルを読み込み",wildcard="Excel File (*.xlsx)|*.xlsx;|All Files|*.*", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
            if dialog.ShowModal() == wx.ID_OK:
                wb = openpyxl.load_workbook(dialog.GetPath())
                ws = wb.worksheets[0]
                i = 0
                for r in range(self.r):
                    for c in range(self.c):
                        cell = ws.cell(r+1,c+1).value
                        if cell != None:self.textctrls[i].SetValue(str(cell))
                        i += 1
        elif ID == 2:
            #Excelファイルを保存
            dialog = wx.FileDialog(self,"Excelファイルを保存",wildcard="Excel File (*.xlsx)|*.xlsx|All Files|*.*",style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
            if dialog.ShowModal() == wx.ID_OK:
                wb = openpyxl.Workbook()
                ws = wb.worksheets[0]
                i = 0
                for r in range(self.r):
                    for c in range(self.c):
                        ws.cell(r+1,c+1).value = self.textctrls[i].GetValue()
                        i += 1
                wb.save(dialog.GetPath())
        elif ID == 3:
            sys.exit()
app = wx.App(0)
MyFrame().Show(True)
app.MainLoop()

実行してみる

ece.png

Excelにはこう書き込み、Book1.xlsxで保存した。

次に、作ったスクリプトのファイルメニューから「開く」をクリックしてBook1.xlsxを開く

ece2.png

正常に読み込まれた!!!

つぎにこの内容を別名で保存してみる
ファイルメニューの「保存」からExcelファイルで保存可能。

そしてExcelでそれを開いてみると...

ece3.png

数値も文字列になっちゃてるし、セルの大きさも違う。
でも書き込まれたは書き込まれたからいいか。


まだ、
・セルの高さと幅
・数値と文字列
という問題は残っているが、今回はここまで!
もしかしたら更新するかも!

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