- PR -

CSV ⇒ EXCEL エクセルファイルを確認すると「001」が「1」と表示されます。

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-12 09:49
引用:

渋木宏明(ひどり)さんの書き込み (2006-01-12 09:42) より:

Excel で CSV ファイルを開いた後にセルの書式設定をしてやって、
Save の時に保存形式を明示的に指定してやればいいんじゃないすか?


Excel.Application から CSV ファイルを開いて、
FileFormat を Excel Book に変更することで可能であることは、私も保証します。
が、"001" が "1" になることを防ぐことはできるのでしょうか?

CSV ファイルから開いた時点で、書式は失われ "1" という数字になっています。
再セットする必要があるとして、「"001" であった」ことは、Excel.Application から取得できるのでしょうか?

私は、それを焦点に当てています... (^^;)
これができるのであれば、低速なれど方法の 1 つとして選択は可能です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-12 10:22
引用:

Excel.Application から CSV ファイルを開いて、
FileFormat を Excel Book に変更することで可能であることは、私も保証します。
が、"001" が "1" になることを防ぐことはできるのでしょうか?

CSV ファイルから開いた時点で、書式は失われ "1" という数字になっています。



でしたっけ?

ワークブックを保存するまでは、セルデータは 001 で、書式のせいで 1 になってるもんだと勘違いしてました (^^;

となると、「CSV を Excel で開いてから」どうこうする戦略は×ですね。

CSVのデータをプログラムで読み込んで、新規で開いたワークブックのセルに1個ずつ書式とともにセットするか、Excel をオートメーションして書式付でとりこませるかの2つくらいしか道はないかな?
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-01-12 10:25
引用:
CSV ファイルから開いた時点で、書式は失われ "1" という数字になっています。
再セットする必要があるとして、「"001" であった」ことは、Excel.Application から取得できるのでしょうか?



Workbooks.Open を用いた場合には、数値(Double)として取り込まれますので、
無理です。

簡単にやりたいのであれば、既出ですが拡張子を ".txt" に Rename してから
OpenText Method で取り込む。

あとは、Cell の書式設定を文字列にしておいて、
Workbooks.Open とは別の手段を用いてゴリゴリと
Cell に Set するとか。

ちなみに、VBA とかであれば、一度 String 型の変数に Set すれば、
文字列で取り込まれますが、.NET ではどうなのでしょうかね?
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2006-01-12 10:55
Excel.QueryTableを使うと書式付けて読めますよ。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-12 11:31
引用:

ちゃっぴさんの書き込み (2006-01-12 10:25) より:

簡単にやりたいのであれば、既出ですが拡張子を ".txt" に Rename してから
OpenText Method で取り込む。


実は、OpenText メソッドは先ほどからこっそり試していました。(^^;)
Extension を .txt に変えると 1 つのデータとして見なされるので、
Delimiter をカンマであることを明示化する必要がありますね。

そして、それよりももっと重要なのは、FieldInfo の指定をせねばならないことですね。
指定しなければ、問題は CSV の時のままです。

# これが判らなかった...

コード:

    xlBooks.OpenText (
        stFilePath, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
        Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, true,
        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
        new object[] {1, 2, 2, 2, 3, 2},
        System.Reflection.Missing.Value, System.Reflection.Missing.Value,
        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value
    );


こんな感じでいけそうです。(多分)

引用:

ちなみに、VBA とかであれば、一度 String 型の変数に Set すれば、
文字列で取り込まれますが、.NET ではどうなのでしょうかね?


はい、置き換えれば OK ですね。
ベタに "001" とかを設定すると、"001" として保持されます。

あー、調べ疲れました...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)