レポートをCSVファイルとして作成します。 Excelでファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。
たとえば、CSVファイルに
...,005,...
次に、Excelに5と表示されます。これをオーバーライドして005を表示する方法はありますか?
ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かをしたいと思います。
Excel 2003を使用しています。
.csvファイルを開くときにExcelが適用する書式を制御する簡単な方法はありません。ただし、次の3つの方法が役立つ場合があります。
私の好みが最初のオプションです。
オプション1 –ファイル内のデータを変更する
.csvファイルのデータを次のように変更できます...、=” 005”、...これはExcelで...、5として表示されます、...
Excelはデータを数式として保持しますが、列をコピーして特殊な値を貼り付けを使用すると、数式は削除されますが、書式は保持されます
オプション2 –データのフォーマット
単にフォーマットの問題であり、その列のすべてのデータの長さが3桁の場合。次に、データをExcelで開き、このカスタム形式でデータを含む列をフォーマットします
オプション –ファイル拡張子を.dif(データ交換形式)に変更します
ファイル拡張子を変更し、ファイルインポートウィザードを使用して形式を制御します。拡張子が.difのファイルは、ダブルクリックするとExcelによって自動的に開かれます。
ステップバイステップ:
CSVを使用せず、SYLKを使用します。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
書式設定をはるかに制御でき、Excelは内容を調べてフィールドの種類を推測しようとしません。少し複雑に見えますが、非常に小さなサブセットを使用しても問題ありません。
これは、Microsoft Office 2010、Excelバージョン14で機能します。
「ファイル自体に何かをする」というOPの設定を読み間違えました。私はまだインポートを直接フォーマットするソリューションが必要な人のためにこれを保持しています
セルに改行しないスペースを追加すると役立ちます。例えば:"firstvalue";"secondvalue";"005 ";"othervalue"
Excelを強制的にテキストとして扱い、スペースは表示されません。 Windowsでは、alt + 0160を傾けることで、改行しないスペースを追加できます。詳細については、こちらを参照してください: http://en.wikipedia.org/wiki/Non-breaking_space
Excel 2010で試してみました。これが、この問題の非常に適切な解決策をまだ探している人々に役立つことを願っています。
実際、少なくともOffice 2003以降では、ExcelスプレッドシートをXMLファイルとして保存できることがわかりました。したがって、XMLファイルを作成し、ダブルクリックするとExcelで開かれます。 SYLKと同じレベルの制御を提供しますが、XML構文はより直感的です。
範囲をテキストとして単純にフォーマットできます。
また、 here は、数値形式とそのプログラミング方法に関する素晴らしい記事です。
C#コードからCSVデータをエクスポートするときにこの問題があり、タブ文字\ tを先頭のゼロデータに追加することでこれを解決したため、データはExcelでは数値ではなくテキストとして解釈されました(他の文字を追加するのとは異なり、 t見られる)。
= "001"アプローチが好きでしたが、これにより、インポートCSVファイルからこのすべてのフォーマットを削除せずに、エクスポートされたCSVデータをC#アプリケーションに再インポートすることはできません(インポートデータをトリミングするだけです) 。
テキストインポートWizardメソッドは、インポートするCSVファイルのセル内に改行がある場合は機能しません。このメソッドは、このシナリオを処理します(少なくともタブ区切りデータで):
これは古い質問ですが、ここにリストされていない解決策があります。
Csvを生成するとき、コンマの後、値の前にスペースを追加します。 , 005,
。
これは、とにかくExcel 2007での自動日付書式設定を防ぐのに役立ちました。
ファイルをインポートするときに、列タイプを選択できると思います。数値ではなくテキストにします。現時点では、確認するコピーがありません。
csvをoleDBにロードし、すべての推定データ型を文字列に強制
同じ質問をして、コードで答えました。
基本的にcsvファイルがロードされると、oledbドライバーが仮定を行い、どのような仮定を行うかを伝えることができます。
私のコードはすべてのデータ型を強制的に文字列にします...スキーマを変更するのは非常に簡単です。私の目的のために、xsltを使用してtiを希望どおりに取得しましたが、さまざまなファイルを解析しています。
これは1日中私を夢中にさせています(CSVファイルを開く前にExcelの列タイプを制御できないため)、これはVB.NETとExcel Interopを使用して私のために働きました:
'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
さて、ExcelはCSVファイルのウィザードをポップアップしません。ファイル名を.txtに変更すると、次回[ファイル]> [Excelで開く]を実行したときにウィザードが表示されます。
フィールドの前に一重引用符を付けます。 Excelは、数字のように見えても、テキストとして扱います。
...,`005,...
EDIT:これは間違っています。アポストロフィトリックは、データをExcelに直接入力する場合にのみ機能します。 CSVファイルで使用すると、フィールドにアポストロフィが表示されますが、これは望ましくありません。
CSVを開くと、テキストインポートウィザードが表示されます。ウィザードの最後のステップでは、特定の列をテキストとしてインポートできるため、「00」プレフィックスを保持できます。その後、任意の方法でセルをフォーマットできます。
Excel 2007で試したところ、動作するように見えました。
CSVドキュメントの番号の前に 'を追加するだけです。