EXCEL

数字が数値。エクセルのバグ?

in

Excelでcsvファイルを取り込むには、OpenTextが便利なんだけど"数字"が数値になってしまうのがいただけない。これを回避する手段としてFieldInfoがあるわけなんですがこれがうまくいかないことがあります。例えば、

Workbooks.OpenText Filename:="c:¥abc.csv", StartRow:=1,
  DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
  Tab:=False, Semicolon:=False, Comma:=True, Space:=False,
  Other:=False,FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1))

こんなコードは間違いないはずなんですが、やっぱり"0001"は1になってしまう。色々、調べてみたけれど原因はわからず。まあ、めずらしくもないバグなんですが今日、ひょんなことから解決しました。

Workbooks.OpenText Filename:="c:¥abc.txt", StartRow:=1,
  DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
  Tab:=False, Semicolon:=False, Comma:=True, Space:=False,
  Other:=False,FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1))

先のコードとの違いはどこ?ちょっと気づかないでしょ。なんと、取り込むファイル名の拡張子を変更したらちゃんと"0001"になりました。なんだかなぁ。拡張子の関連付けなんかと関係があるのかもしれませんが(僕の環境ではcsvはエクセルに関連付けしていません)やっぱバグだよなぁ。くだらないことだけど解決してスッキリです。 (Excel2000環境です。)

VC++(MFC)で帳票印刷の手を抜く方法

in

前に書いたVC++(MFC)でExcelを操作する方法というエントリを読んでくれる方が結構いて、あぁ、Web全盛のこの時代でも僕と同じようにまだデスクトップアプリを作成せねばいけない方は多いんだなと実感します。そこで、僕が日頃もっとも面倒だと思っているVC++(MFC)からの帳票印刷について書いておきます。

VC++(MFC)でExcelを操作する方法(2)

前回は、セルに値を設定するところまで書いたので書式設定方法について補足します。前回書いた方法で値をセットしたエクセルを開いてみるとわかるのですが数値としてセルにセットした内容も文字列として表示されています。一度、セルを選択してダブルクリックするなどすれば数値として認識されるようですがこれは少し面白くありません。最初は、単にセルに書式を設定すればちゃんと数値扱いになるかななどとタカを括っていたのですが...

VC++(MFC)でExcelを操作する方法(1)

仕事で、久しぶりVC++をやることに。どうしても出力はExcelにして欲しいという要望があってかつての記憶を手繰りながら忘れないうちにメモ。長くなりそうなので、分割してアップします。

クラスの追加で「タイプライブラリからMFCクラスを作成」ExcelObjectライブラリを選択し、次のインタフェースをからクラスを生成します。(注意:Rangeクラスを生成しコンパイルするとVARIANT DialogBox()の箇所でエラーとなります。この部分はVARIANT CDialogBox()として対処しています。)

  • _Application
  • _Workbook
  • _Worksheet
  • Range
  • Workbooks
  • Worksheet
  • それぞれのクラスは名前のままエクセルのWorkbook(s)/Worksheet(s)/Rangeのラッパクラスとなります。また、各種関数を呼び出す際に使用するオプションパラメタは下記のように定義しています。

コンテンツの配信