レポートをCSVファイルとして作成します。Excelでファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。
たとえば、CSVファイルにが含まれている場合
...,005,...
次に、Excelはそれを5として表示します。これをオーバーライドして005を表示する方法はありますか?
ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かを実行したいと思います。
私はExcel2003を使用しています。
レポートをCSVファイルとして作成します。Excelでファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。
たとえば、CSVファイルにが含まれている場合
...,005,...
次に、Excelはそれを5として表示します。これをオーバーライドして005を表示する方法はありますか?
ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かを実行したいと思います。
私はExcel2003を使用しています。
回答:
.csvファイルを開くときにExcelが適用する書式を制御する簡単な方法はありません。ただし、以下にリストされているのは、役立つ可能性のある3つのアプローチです。
私の好みは最初のオプションです。
オプション1-ファイル内のデータを変更する
.csvファイルのデータを次のように変更できます...、=” 005”、...これはExcelで...、005、..として表示されます。
Excelはデータを数式として保持しますが、列をコピーして特殊な値を貼り付けると、数式は削除されますが、書式は保持されます。
オプション2–データをフォーマットする
それが単にフォーマットの問題であり、その列のすべてのデータが3桁の長さである場合。次に、Excelでデータを開き、データを含む列をこのカスタム形式000でフォーマットします。
オプション3–ファイル拡張子を.dif(データ交換形式)に変更します
ファイル拡張子を変更し、ファイルインポートウィザードを使用して形式を制御します。拡張子が.difのファイルは、ダブルクリックするとExcelによって自動的に開かれます。
ステップバイステップ:
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で試してみました。これが、この問題の非常に適切な解決策をまだ探している人々に役立つことを願っています。
C#コードからCSVデータをエクスポートするときにこの問題が発生し、先頭のゼロデータにタブ文字\ tを付加することでこれを解決したため、Excelではデータが数値ではなくテキストとして解釈されました(ただし、他の文字を付加するのとは異なり、見られない)。
= "001"のアプローチが好きでしたが、これでは、インポートされたCSVファイルからこのフォーマットをすべて削除せずにエクスポートされたCSVデータをC#アプリケーションに再度インポートすることはできません(代わりに、インポートデータをトリミングします)。 。
csvをoleDBにロードし、推測されたすべてのデータ型を文字列に強制します
同じ質問をして、コードで答えました。
基本的に、csvファイルがロードされると、oledbドライバーは仮定を行い、どのような仮定を行うかを指示できます。
私のコードはすべてのデータ型を文字列に強制しますが...スキーマを変更するのは非常に簡単です。私の目的では、xsltを使用してtiを希望どおりに取得しましたが、さまざまなファイルを解析しています。
CSVドキュメントの番号の前に 'を追加するだけです。
これは私を一日中夢中にさせてきました(実際、CSVファイルを開く前にExcelの列タイプを制御することはできないため)、これはVB.NETと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を開くと、テキストインポートウィザードが表示されます。ウィザードの最後のステップで、特定の列をテキストとしてインポートできるようになります。これにより、「00」プレフィックスが保持されます。その後、セルを任意の方法でフォーマットできます。
Excel 2007で試してみましたが、動作しているように見えました。
フィールドの前に一重引用符を置きます。Excelは、数字のように見えても、テキストとして扱います。
...,`005,...
編集:これは間違っています。アポストロフィのトリックは、Excelに直接データを入力する場合にのみ機能します。CSVファイルで使用すると、フィールドにアポストロフィが表示されますが、これは不要です。