トップ «前の日記(2004-11-28) 最新 次の日記(2004-11-30)» 編集

日々の破片

著作一覧

2004-11-29

_ 0から始めるか1からやるか

POIは0から始まる。これはJavaの配列のインデックスとも一致している。

しかし、VBAの配列のインデックスは本当は1から始めるのが文法を作った人の意図のはず。だからExcelを初めとしたOffice系のオートメーションではインデクサの引数は1から始まるのではないだろうか。

というかExcelそのもののロウが1から始まってるからかも。0じゃないよ。表計算ソフトの行表示としても1と書いてあるのは多分、正しい(しょせん多分に過ぎないけど。しかし自然数を採用するのは自然ではあると思う)。

だからVBAでの(というかCOMで表されているExcelのAPIとしての)Cells(1,1)というのは、POIのRow=0、Cell=0になるのだが、これってどうなのかな。少なくてもRange("A1")というのは判りやすいし、そこからCells(1, 1)もわかりにくくは無いような気もする。とすればPOIがわかりにくいということだ。でも、最初から0として試し始めていたから直観的なのかも知れないけど、わからん。

同じJavaのAPIでもJDBCは1から始めてる。これはとってもイヤで、getString(0)とか書いて実行時に例外を食らったことが無いわけでは無い。とは言え、SQLの発想としては正しいのかな、と思うし、(実はADOは知っているけどODBCは知らないし、今更調べても役に立たないから調べないけど)多分ODBCも1から始めてるんじゃなかろうか。

っていうか調べてしまった。

ColumnNumber

[Input]

Number of the column for which to return data. Result set columns are numbered in increasing column order starting at 1. The bookmark column is column number 0; this can be specified only if bookmarks are enabled.

——SQLGetDataのAPIリファレンスから引用

そうかカラム番号なのか。なら、1から始まるのはExcelのセルと同じで(多分)正しい発想だろう。

このあたりがPOIの注意点かな。Excelのオブジェクトモデルとは全然異なるということで。

本日のツッコミ(全2件) [ツッコミを入れる]
_ aurora (2004-12-01 22:03)

0始まりは先頭からのオフセットを数えていて,1始まりは実体の数を数えているということで,値型と参照型の話に結びつけるのはちょっと苦しいでしょうか...

_ arton (2004-12-02 00:37)

なるほど。オフセットでみるか要素をたどるかで区別するのはありかも。前者が参照で後者が値というのは直感的(観じゃないかも)な気がします。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え