EXCEL
Up one level立山 秀利 (著) Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!
立山 秀利 (著) Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!
EXCELのマクロ本はたくさんあって、やたらに丁寧に書かれているものが多いのですが、いざ自分のやりたいことをやろうとするとあまり役にたちません。 マカロニさんなども、結局はマクロのコマンド辞典だけを参照しています。
この本はそうした本とはひと味違い、プログラムのアルゴリズムをどうやって書くかということに重点が置かれています。
マクロを書こうとする人のかなりの部分が、マクロの記録を延長してプログラムを書こうとするのですが、それでできることは限られています。 素人プログラマーにとっても、こうした本を参考に基本的なアルゴリズムをきちんとマスターすることが大事だと思います。
- Category(s)
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2075/tbping
西沢 直木 (著) Excel+PHP Webデータベース開発
西沢 直木 (著) Excel+PHP Webデータベース開発
PHPからEXCELフィアルを使ってWEBアプリを作るという本です。
ADODBを使ってデータベース的に操作したり、「PHPExcel」ライブラリを使って直接ファイルを読んだり、Win32COMを使ったりといろいろな方法でアクセスしています。 もちろん、Pythonでも同じことはできます。
- Category(s)
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2061/tbping
坪崎 誠司 (著) Excel VBA スキルアップコレクション
坪崎 誠司 (著) Excel VBA スキルアップコレクション
EXCELのマクロの本はたくさん出ていますが、内容は似ているものが多く、バッチ処理っぽいものを作ろうとしたときにどうしていいのか分からないことが多いです。
この本はひと味違って、こんなことが載っています。
- VBAから実行した非同期処理の終了を監視して、順次処理を実現する
- 他のエクセルブックのマクロを実行する
- エクセルファイルを開く際に自動リンク機能を無視する
- 大量のエクセルファイルを読み取り専用で開き、保存せずに閉じる
- Category(s)
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2060/tbping
マカロニココさん マクロ漬け
Pythonの基礎をマスターし、ITパスポートにも合格したマカロニ さんですが、先週あたりからパソコンの前で固まっていることがあります。原因はEXCELのマクロ言語でした。 EXCELのVBAは、一つのことを実現する方法がたくさんあるせいか、わかりにくいですね。 Pythonを好きな人の大半は、VBAを美しくないと感じるのではないでしょうか。 ぼやいていても仕方がないので、マカロニさんと一緒に一日をかけてマクロ攻略法を検討しました。 その結果、次の3つで何でもできることがわかりました。
- ループはFor next
- if then else
- Cells(i,j).value
For文のおしまいの値は、ブロックのお尻をとって設定します。
プログラムがうまく動いたときの彼女の笑顔には、毎回感動させられます。 「できました!」と振り返る彼女の瞳には、星がキラキラ輝いて、薔薇も裸足で逃げ出しそうな笑顔なんです。
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/1962/tbping
ExcelのデータをPyExceleratorを使って読む
OpenOfficeのCalcを使ってエクセルファイルをpythonで操作する件は、fgshunさんにお任せして、私の方は、PyExcelerator でExcelファイルを読むのに挑戦してみます。
参考にさせていただいたサイト
seraphyの日記
迷走航路@hatena
読み込むファイルは次のようなもので、シート2枚からなっています。

>>> import pyExceleratorすごく簡単です。データはシートごとにタプルになっています。シートの中では、ひとつ目がシート名、二つ目には辞書形式で座標と値が入っています。これはpythonレシピブック125:巨大で疎な配列を使う という技ですね。
>>> sheets = pyExcelerator.parse_xls('foo1.xls')
>>> sheets
[(u'test1', {(0, 1): u'B1', (0, 0): u'A1', (2, 1): 20, (2, 0): 10, (2, 2): 30.0, (1, 0): u'A2', (1, 1): u'B2', (4, 0): u'A5'}), (u'test2', {(0, 1): u'\u307f\u304b\u3093', (0, 0): u'\u308a\u3093\u3054', (0, 2): u'\u3070\u306a\u306a'})]
#!/usr/bin/env python次のような結果になります。
# -*- coding: utf-8 -*-
import pyExcelerator
sheets = pyExcelerator.parse_xls('foo1.xls')
for sheet_name, values in sheets:
print 'sheet =', sheet_name
print '------------'
for row_idx, col_idx in sorted(values.keys()):
v=values[row_idx,col_idx]
print row_idx,col_idx,v
>>>
sheet = test1
------------
0 0 A1
0 1 B1
1 0 A2
1 1 B2
2 0 10
2 1 20
2 2 30.0
4 0 A5
sheet = test2
------------
0 0 りんご
0 1 みかん
0 2 ばなな
大変お手軽なのですが、A1セルとA2セルの値の合計をA3セルに書き込むというような場合はどうすればいいんでしょうか?
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/1570/tbping
差分のファイルだけをコピーするpython スクリプト
srcディレクトリにあるファイルをdestディレクトリにコピーします。
既にdestディレクトリに存在する場合は、最終更新日を確認して一致すれば上書きはしません。
import os,string,shutil
srcdir='C:\Documents and Settings\seko\デスクトップ\src'
destdir='C:\Documents and Settings\seko\デスクトップ\dest'
srcfilelist=os.listdir(srcdir)
srcdict={}
for i in srcfilelist:
srcdict[i]=os.path.getmtime(os.path.join(srcdir,i))
destfilelist=os.listdir(destdir)
destdict={}
for i in destfilelist:
destdict[i]=os.path.getmtime(os.path.join(destdir,i))
for i in srcfilelist:
if i in destfilelist and srcdict[i]==destdict[i]:
print i,'alredy exist'
else:
shutil.copy2 (os.path.join(os.path.normpath(srcdir),i),os.path.join(os.path.normpath(destdir),i))
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/1210/tbping
古川 順平 (著) 仕事に役立つExcelデータベース
一年ぶりくらいにEXCELのマクロを書かされていて、気が狂いそうだ。
どんなふうにオブジェクトを定義したらいいかとか、繰り返しはどうするのかとか、そんな簡単なことがわからない。調べようとしても調べにくいし、一貫性がないような気がする。
美しさにかけるものを使うのは本当に辛くて、肩こりが急激に悪化して息をするのも辛い有様だ。
ところで、EXCELの本の多くは、手動の操作に関する本が多いし、マクロについても見た目を整えるようなものが多いような気がする。
ひとつの使い方として、テーブルを定義してデータベースのように、キーでつき合わせたりすると大変便利なのだが、そういう時に、この本はとても役に立つ。でも、VBAのことはあまり書いてないので、これ一冊というわけにはいかず、別の本も必要。
- Category(s)
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/460/tbping
pythonでファイルのリストをとってEXCELに書き込むプログラム
Pythonでやってみる。
必要なもの
こんなプログラムで、ファイルのフルパスのリストとサイズと最終更新日がEXCELに下方向に張り付いていく。
import win32com.client,os,time
xlApp=win32com.client.Dispatch("Excel.Application")
xlApp.Visible=1
xlApp.WorkBooks.Add()
sheet=xlApp.Sheets(1)
path='c:/temp'
filelist=os.listdir(path)
#print filelist
for i in range(len(filelist)):
item=os.path.join(os.path.normpath(path),filelist[i])
#print item
#print i+1,os.path.basename(item),os.stat(item).st_size,time.ctime(os.stat(item).st_mtime)
sheet.Cells(i+1, 1).Value=item
sheet.Cells(i+1,2).Value=os.stat(item).st_size
sheet.Cells(i+1,3).Value=time.ctime(os.stat(item).st_mtime)
Lotus Notesも同様にコントロールすることができる。
python recipe bookを見ながら書いた。
Lotus NotesのデータをEXCELで取る
pythonからNotesのデータが取れるのであれば、EXCELからも当然取れるということにふと気づく。次の例はsheet1に取りたいフィールド名を書いておくと、sheet2にデータが取れるというものである。
実際に使う場合は、EXCELの範囲に名前を付けておき、一行目にフィールド名を書くようにして、列の追加や削除が合った場合でもプログラムの変更が必要ないようにしておくと良い。そうしておけば、ユーザがEXCELの機能だけを使って、フィールドの追加、削除をすれば、ほしいデータが取れるようになる。また、NOTESへのリンクをお尻につけているので、EXCEL上のリンクをダブルクリックするとNOTESに飛ぶこともできる。
Sub getSubject()
Dim nSs As Object, nDb As Object
Dim nDocs As Object, nDoc As Object
Application.Visible = True
DBServer = "CN=hoge/O=hoge" 'Server name
DBFile = "hoge.nsf" 'Database name
Set nSs = CreateObject("Notes.NotesSession")
Set nDb = nSs.GetDataBase(DBServer, DBFile)
Set nDocs = nDb.GetView("hoge") 'select View
N = nDocs.EntryCount
Set nDoc = nDocs.GetFirstDocument
For i = 1 To N
For j = 1 To 5
field = Sheet1.Cells(1, j)
Sheet2.Cells(i, j).Value = nDoc.GetItemValue(field)(0)
Next
Sheet2.Cells(i, 6).Value = nDoc.NotesURL
Set nDoc = nDocs.GetNextDocument(nDoc) ' select next Document
Next
End Sub
- Category(s)
- Lotus Notes
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/14/tbping
Papasan、二日間かけて練り上げましたね。