レポートを CSV ファイルとして作成します。Excel でファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。
たとえば、CSV ファイルに
...,005,...
その後、Excel はそれを 5 と表示します。これを上書きして 005 を表示する方法はありますか?
ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かをしたいと思います。
エクセル2003を使用しています。
レポートを CSV ファイルとして作成します。Excel でファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。
たとえば、CSV ファイルに
...,005,...
その後、Excel はそれを 5 と表示します。これを上書きして 005 を表示する方法はありますか?
ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かをしたいと思います。
エクセル2003を使用しています。
CSV を使用せず、SYLK を使用してください。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
書式設定をより詳細に制御でき、Excel は内容を調べてフィールドの種類を推測しようとしません。少し複雑に見えますが、非常に小さなサブセットを使用することで解決できます。
これは、Microsoft Office 2010、Excel バージョン 14 で機能します。
「ファイル自体に何かをする」というOPの設定を読み間違えました。インポートを直接フォーマットするソリューションが必要な人のために、私はまだこれを保持しています
実際、少なくとも Office 2003 以降では、Excel スプレッドシートを XML ファイルとして保存できることを発見しました。したがって、XML ファイルを生成できます。それをダブルクリックすると、Excel で開かれます。SYLK と同じレベルの制御を提供しますが、XML 構文はより直感的です。
範囲をテキストとしてフォーマットするだけです。
また、数値形式とそのプログラミング方法に関する素晴らしい記事もここにあります。
セルに改行なしのスペースを追加すると役立つ場合があります。例えば:
"firstvalue";"secondvalue";"005 ";"othervalue"
Excel がそれをテキストとして処理することを強制し、スペースは表示されません。Windows では、alt+0160 を押すことで改行なしのスペースを追加できます。詳細については、こちらを参照してください: http://en.wikipedia.org/wiki/Non-breaking_space
Excel 2010 で試してみました。これが、この問題の適切な解決策をまだ探している人々に役立つことを願っています。
インポートするCSVファイルのセル内に改行がある場合、テキストインポートウィザードの方法は機能しません。このメソッドは、このシナリオを処理します(少なくともタブ区切りのデータを使用)。
csv を oleDB にロードし、推論されたすべてのデータ型を強制的に文字列にします
私は同じ質問をして、コードで答えました。
基本的に、csv ファイルがロードされると、oledb ドライバーは仮定を行います。どのような仮定を行うべきかを伝えることができます。
私のコードはすべてのデータ型を強制的に文字列にします...スキーマを変更するのは非常に簡単です。私の目的のために、私は xslt を使用して ti を希望どおりに取得しましたが、さまざまなファイルを解析しています。
ファイルをインポートするときに、列の種類を選択できると思います。数値ではなくテキストにします。現時点では、チェックするコピーが目の前にありません。
これは一日中私を夢中にさせていました (実際には、CSV ファイルを開く前に Excel の列の種類を制御することはできません)。
'Convert .csv file to .txt file.
FileName = ConvertToText(FileName)
Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
{2, xlTextFormat}, _
{3, xlGeneralFormat}, _
{4, xlGeneralFormat}, _
{5, xlGeneralFormat}, _
{6, xlGeneralFormat}}
'We are using OpenText() in order to specify the column types.
mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
mxlWorkBook = mxlApp.ActiveWorkbook
mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)
Private Function ConvertToText(ByVal FileName As String) As String
'Convert the .csv file to a .txt file.
'If the file is a text file, we can specify the column types.
'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.
Try
Dim MyReader As New StreamReader(FileName)
Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
Dim MyWriter As New StreamWriter(NewFileName, False)
Dim strLine As String
Do While Not MyReader.EndOfStream
strLine = MyReader.ReadLine
MyWriter.WriteLine(strLine)
Loop
MyReader.Close()
MyReader.Dispose()
MyWriter.Close()
MyWriter.Dispose()
Return NewFileName
Catch ex As Exception
MsgBox(ex.Message)
Return ""
End Try
End Function
これは古い質問であることは承知していますが、ここに記載されていない解決策があります。
csv を生成するときは、コンマの後にスペースを追加しますが、値の前に、たとえば, 005,
.
とにかく、これはExcel 2007での自動日付フォーマットを防ぐために機能しました。
フィールドの前に一重引用符を置きます。数値のように見えても、Excel ではテキストとして扱われます。
...,`005,...
編集:これは間違っています。アポストロフィのトリックは、データを直接 Excel に入力する場合にのみ機能します。CSV ファイルで使用すると、フィールドにアポストロフィが表示されますが、これは望ましくありません。
CSV を開くと、テキスト インポート ウィザードが表示されます。ウィザードの最後のステップで、特定の列をテキストとしてインポートできるため、'00' プレフィックスが保持されます。その後、セルを任意の方法でフォーマットできます。
Excel 2007 で試してみたところ、動作しているように見えました。
Excel が CSV ファイルのウィザードをポップアップ表示することはありません。名前を .txt に変更すると、次に [ファイル] > [Excel で開く] を実行したときにウィザードが表示されます。