- - PR -
CSV ⇒ EXCEL エクセルファイルを確認すると「001」が「1」と表示されます。
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-11 19:19
正規の方法をひとつのメソッドに実装しようとすると、かなり悲惨ですね。(^^;)
疲れました... orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 00:23
ねぇねぇ、これって、シート全体を文字列フィールドに変えちゃダメなの?
マクロで記録できると思うんだけど・・・? もし、局所的なマスだけに影響を及ぼしたいなら、 strTemp2 = int(strTemp) if ( strTemp != strTemp2) { 局所的に文字列フィールド } こんな処理で何とかなりません? | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 00:34
CSV には書式なんて存在しませんよ。 やるならば、Excel Book 形式などにする必要があります。 だからこそ、元質問者さんは変換しようとされたんだと思ってるんですが。
このコードの意図が判りませんでした... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 01:06
このソースコードを見る限り、 ExcelWorkBookにCSVを突っ込んでると思うのですが・・・? CSVファイルをエクセルファイル化してますよね? って、文意を読み違えてるのかな? Excelに持ってくるだけなら Excel側の各セルの書式を変えてやれば良いんじゃないですか?って意味です。 コードは以下の間違いでした。 ごめんなさい。 strTemp2 = str(int(strTemp) ) if ( strTemp != strTemp2) { 局所的に文字列フィールド } int関数とかstr関数がC#に用意されてるかは理解してないのですが、 CSVの一つのValueを評価したらいいと思うのですが? ダメですかね? | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 01:47
はい、そうですね。
いいえ、していません。 何もしていませんから「化」けることはできません。
出来るんでしょうか? Excel.Workbook.Open メソッドは、あくまでも Excel アプリケーションから、 書式なし (メモ帳レベル) のファイルを読み込んでいるだけです。 読み込んだ時点で書式は失われて、"001" は 1 になりますが、どうやって元の "桁数" を復元すれば良いでしょうか?
数値型に置き換えて、再度文字列にすることでカンマを除いているってことでしょうか。 キャスト前の検証の有無に関わらず、キャストというものは高コストです。 String.Replace メソッドで取り除くべきだと思います。
私は VB にはあまり詳しくないのですが、 int と str 関数はキャストとは無関係ではないかと思います。 (リファレンスを見てください、CInt, CStr とは全く別物です)
桁数決め打ちで良いのであれば、Text の形成だけでいけますね。 あとは、FileFormat を Excel Book 形式で保存すれば良いです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 09:14
CSVと言うデータを表示するI/Fにエクセルを使っていると解釈しました。
それをもって、エクセルファイル化した・・・と意識しています。 CSVをそのままつっこむのではなく、 エクセルを開いてから各セルにプロットしてやれば良いでしょう。 エクセルを開いた後、 エクセルのシートに対して全てのセルを「文章」が入るようにセットしてやります。 その上で、CSVのデータを配列に取り込んでから各セルに流し込んでやれば良いと思いますが・・・? 開いた後に.csvと言う拡張子で保存してやれば、いいのではないかなぁ?と。 まぁ、"で括ってやる方が楽ですけどね。 まぁ、その後、CSVを何処かへ持っていくとなると難しいか・・・? えっと、キャストなんて高等な思想はVBにとっては邪道です。 ただ、ひたすら配列をガリガリ扱うんですよ。(笑) できるかできないかと言われれば出来なくは無い・・・かな? strTemp2 = str(int(strTemp) ) 上記はJavaで表現すると String strTemp2 = (Integer.parseInt(strTemp)).toString() こんな感じです。 コレってキャストですか? 001を見分けたい時にコレで取れませんかね? | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 09:41
先にも書きましたが、CSV ファイルを Excel アプリケーションで開いているだけです。 少なくとも、エクセルファイル化ではないでしょう。
先にも書きましたが、何桁であるかも不明な状態で "1" を "001" に復元はできないでしょう。
ロジックに関しては具体的に仰ってください。 この文章をも、私は誤解してそうな気がします。 "何を" Excel で開いた後ですか? 各セルへの再セットは、すでになおこさんも私も実装例をあげています。 CSV ファイルを Excel アプリケーションから開くと "001" は "1" と見なされます。 Cell の参照でかなり処理速度も落ちますし、さらにムダに COM オブジェクトを扱うのは避けたいという事実があります。
すいません、意味が判りませんでした。 CSV ファイルを開いた後に、.csv という拡張子で保存しても何も変わらないと思いますが...
????? 元ファイルを削除する必要はないと思います。 普通に Extension が変わってしまいますからね。 (でないと、別のアプリケーションで正しく扱えない)
キャストは「高等な思想」ではないでしょう。 また、VB だからダメという根拠が判りません。 キャストを避けるべきなのはどの言語でも変わりません。
るぱんさんの仰ることが、判らないことが多々あります。 キーワードを並べただけでは、私には理解できません。 できれば、具体例をあげてください。
繰り返しに近いですが、parseInt メソッドが成功する保証は? 先ほども申し上げたように String.Replace メソッドを使うべきです。 できるできないを私は問題にしていません。 # VB の Int 関数が parseInt メソッドの代わりだとも思っていません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||||||||||
|
投稿日時: 2006-01-12 09:42
ってことなんで、最終成果物として欲しいのは「Excel ワークシート」なんでしょう。 てことなら、Excel で CSV ファイルを開いた後にセルの書式設定をしてやって、Save の時に保存形式を明示的に指定してやればいいんじゃないすか? |