喫茶XRAYトップページ


[1661] ExcelApplicationで教えて返信 削除
2008/5/15 (木) 22:35:04 pal
毎度お世話になっています

ExcelApplicationでテーブルのデータを取り込もうとしています
xrayさんのサンプルを参考に簡単に取り込めましたが
商品コードのような頭ゼロ詰めの値が数値としてセットされてしまいます
カラムの属性かなんか文字列として頭ゼロ詰めを残す方法がありますでしょうか?
どなたかご教授ください。

[1662] Re:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/16 (金) 14:06:27 Mr.XRAY
▼ palさんこんにちは。

> カラムの属性かなんか文字列として頭ゼロ詰めを残す方法がありますでしょうか?

状況に応じていろいろ考えられますが、

(1) セル(palさんの場合は列かもしれませんが)の書式をあらかじめ
    設定してもかまわないなら、その列の書式を「文字列」に設定
    しておく、または、実行時に設定する。

(2) そのセルに代入する値(文字列)の先頭に'を付加しておく。
    あるいは、実行時に付加する。
    エクセルでは、先頭が'であると文字列として認識するので。

(2)の場合、先頭に'を付加するには、
    StrText := '''文字列';
変数であれば、
    StrText := ''''+StrText;
といった具合です。何か関数でもあったかも知れません。ないか?

[1663] Re2:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/16 (金) 22:17:44 pal
▼ Mr.XRAYさん
> (1) セル(palさんの場合は列かもしれませんが)の書式をあらかじめ
>     設定してもかまわないなら、その列の書式を「文字列」に設定
>     しておく、または、実行時に設定する。
>
> (2) そのセルに代入する値(文字列)の先頭に'を付加しておく。
>     あるいは、実行時に付加する。
>     エクセルでは、先頭が'であると文字列として認識するので。
>
> (2)の場合、先頭に'を付加するには、
>     StrText := '''文字列';
> 変数であれば、
>     StrText := ''''+StrText;
> といった具合です。何か関数でもあったかも知れません。ないか?


ありがとうございます。
(2)の方法でうまくいきました
でも実はこのTExcelApplicationでの速度が異常に遅いので
マスターのHPでご紹介いただいているM&Iさんのxbiffを
今回使用しています。xbiffで上記(2)の方法をとってみたのですが
「’」がもろにでてしまいます。
テーブルの一覧をxlsに落とすのにxbiffだと逆に異常に速いんですね。

ADOでできないかな?
明日でもやってみよう・・・・


[1664] Re3:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/16 (金) 23:45:25 Mr.XRAY
▼ palさん

> でも実はこのTExcelApplicationでの速度が異常に遅いので
> マスターのHPでご紹介いただいているM&Iさんのxbiffを


TExcelApplicationはVBAですから、どうしょうもないですね。
XBiffは直接ファイル構造から読み込んでいますから、当然速いです。
通常の用途ではXBiffで十分だと思います。

もっといろいろな操作をする際に速いのはExcel Createrですね。
ただし、これは使用するPCにDLL(使用するプログラムのフォルダ内に)
が必要です。


>今回使用しています。xbiffで上記(2)の方法をとってみたのですが
>「’」がもろにでてしまいます。


う〜ん。XBiffでもできると思うんですが。
時間があったらテストしてみます。期待しないでください。

[1665] Re4:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/16 (金) 23:51:06 Mr.XRAY
> 時間があったらテストしてみます。期待しないでください。

ちょっと見てみようと思って、XBiff.pasを開いたら、
ゲッゲ、かなり古いバージョン、これからDLして、明日以降ですね (^_^;)

[1666] Re4:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/17 (土) 07:46:39 Mr.XRAY
> う〜ん。XBiffでもできると思うんですが。

XWriteBiff.pasを見てみました。
なるほど、できませんね。このコードだと。
そこで、ちょっと追加してみました。もしかしたら、違うというか、他の方法
があるのかも知れませんが、
WindowsXP(SP2) + Delphi7 Pro
で、Excel2000のブックに書き込んだところ、とりあえずはうまくいっている
様です。

追加部分。(1)〜(6)まで全部で6行あります。

(1) function TWriteBiff.DataKind(const Data: string): integer;
 
  if dt[1]='''' then     //*****(1)
  begin                  //*****(2)
    Result := BLABEL;    //*****(3)
    exit;                //*****(4)
  end else               //*****(5)
  if Pos(dt[1], '-.1234567890') = 0 then

(2) procedure TWriteBiff.WriteCell(Row, Col: integer; rgbAttr: .....

    BLABEL:
      begin
        if Data[1]='''' then Data := Copy(Data,2,Length(Data)); //*****(6)
        sLen := Length(Data) and $FF;
        xLabel := AllocMem(sLen + 1);
        try
           StrLCopy(xLabel, PChar(Data), sLen);
           WriteLabel(Row, Col, rgbAttr, xLabel);
         finally
           FreeMem(xLabel);
         end;
       end;
     end;

エクセルからのデータの読み込みですが、元々データそのものが文字列ですから、
OKだと思います。

[備考]
修正後にコンポを再登録(再インストール)する必要はありません。

[1667] Re5:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/17 (土) 09:52:19 pal
palです。
出来ました....感謝!感謝!
ご丁寧にxbiffまで見ていただいてありがとうございます
やはりマスター、頼りになります

[1668] Re6:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/17 (土) 09:59:48 Mr.XRAY
▼ palさん

> やはりマスター、頼りになります

可愛い、きれいなお嬢さんに「おじ様、頼りになるわ」なんて
言われたら、嬉しいんですけど。
「おじ様」って柄じゃないか!?

でもメイド喫茶はどうもダメ。趣味に合いません。
あっ、鳥肌が.... !!

[1676] Re7:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/22 (木) 07:23:48 M&IHomePage
Mr.X-RAYさん、ご無沙汰しております。
XBiff作者のM&Iです。

本人都合で放置していたXBiffの不具合修正までしていただいて恐縮です。

その内、修正していただいた部分を反映して、私のHPにアップさせていただきます。


[1677] Re8:ExcelApplicationで教えて 先頭が0の文字列の扱い返信 削除
2008/5/22 (木) 19:44:04 Mr.XRAY
▼ M&Iさん、どうもです。

XBiffですが、他にいい方法があるかも知れませんが、とりあえず、
元のコードをなるべく変更しない方針でやってみました。

やはり、XBiffは速いです!!

INCM/CMT
Cyclamen v3.82