質問

レポートをCSVファイルとして作成します。 Excelでファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。

たとえば、CSVファイルに次が含まれている場合

...,005,...

Excelで5と表示されます。 これをオーバーライドして005を表示する方法はありますか?

ファイル自体に何かをしたいので、ユーザーはCSVファイルをダブルクリックして開くことができます。

Excel 2003を使用しています。

役に立ちましたか?

解決

.csvファイルを開くときにExcelが適用する書式を制御する簡単な方法はありません。ただし、以下に3つのアプローチが役立ちます。

最初のオプションは私の好みです。

オプション1–ファイル内のデータを変更します

.csvファイルのデータを次のように変更できます...、 =” 005” 、... これは、Excelで...、 005 、...

として表示されます。

Excelはデータを数式として保持しますが、列をコピーし、特殊な値を貼り付けて使用すると、数式は削除されますが書式は保持されます

オプション2 –データをフォーマットする

フォーマットの問題であり、その列のすべてのデータの長さが3桁の場合。次に、Excelでデータを開き、このカスタム形式 000

でデータを含む列をフォーマットします

オプション3 –ファイル拡張子を.dif(データ交換形式)に変更します

ファイル拡張子を変更し、ファイルインポートウィザードを使用して形式を制御します。 拡張子が.difのファイルは、ダブルクリックするとExcelによって自動的に開きます。

ステップバイステップ:

  • ファイル拡張子を .csv から .dif
  • に変更します
  • ファイルをダブルクリックしてExcelで開きます。
  • 「ファイルインポートウィザード」が起動します。
  • 「ファイルの種類」を「区切り」に設定し、「次へ」ボタンをクリックします。
  • デリミタの下で、「カンマ」にチェックマークを付けて「次へ」ボタンをクリックします。
  • 表示されているデータの各列をクリックし、「列データ形式」を選択します。値が「005」の列は「テキスト」としてフォーマットする必要があります。
  • 完了ボタンをクリックすると、指定した形式でファイルがExcelで開きます。

他のヒント

CSVは使用せず、SYLKを使用します。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

書式設定をより細かく制御できるようになり、Excelは内容を調べてフィールドの種類を推測しようとしません。少し複雑に見えますが、非常に小さなサブセットを使用しても問題ありません。

これは、Microsoft Office 2010、Excelバージョン14で機能します

OPの設定を読み違えました"ファイル自体に何かをすること"。インポートを直接フォーマットするソリューションが必要な人のために、私はまだこれを保持しています

  1. 空の(新しい)ファイルを開く(ファイル->ワークブックから新規)
  2. インポートウィザードを開く(データ->テキストから)
  3. .csvファイルを選択してインポート
  4. ダイアログボックスで「区切り」を選択し、「次へ」をクリックします。
  5. 区切り文字を選択し(「カンマ」以外はすべてチェックを外します)、テキスト修飾子({None}など)を選択し、[次へ]をクリックします
  6. [データプレビュー]フィールドで、テキストにする列を選択します。強調表示されます。
  7. [列のデータ形式]フィールドで、[テキスト]を選択します。
  8. クリック完了。

範囲をテキストとして単純にフォーマットできます。

また、こちらは、数値形式とそのプログラミング方法に関する素晴らしい記事です。

実際、少なくともOffice 2003以降では、ExcelスプレッドシートをXMLファイルとして保存できることを発見しました。 したがって、XMLファイルを作成し、それをダブルクリックすると、Excelで開かれます。 SYLKと同じレベルの制御を提供しますが、XML構文はより直感的です。

セルに改行しないスペースを追加すると役立ちます。 例えば: " firstvalue&quot ;;" secondvalue&quot ;;" 005 &quot ;;" 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にロードし、すべてを強制する文字列へのデータ型の推測

iは同じ質問をし、コードで答えました。

基本的にcsvファイルがロードされると、oledbドライバーは仮定を行います。どの仮定を行うかを伝えることができます。

私のコードはすべてのデータ型を強制的に文字列にします...スキーマを変更するのは非常に簡単です。 私の目的のために、xsltを使用してtiを思い通りに取得しましたが、さまざまなファイルを解析しています。

これは古い質問ですが、ここにリストされていない解決策があります。

csvを生成するとき、カンマの後、値の前にスペースを追加します。 、005、

これは、いずれにせよExcel 2007での自動日付フォーマットを防ぐために機能しました。

インポートされるCSVファイルのセル内に改行がある場合、テキストインポートウィザードの方法は機能しません。このメソッドはこのシナリオを処理します(少なくともタブ区切りデータを使用):

  1. 新しいExcelファイルを作成
  2. すべてのセルを選択するにはCtrl + A
  3. 数値形式コンボボックスで、テキストを選択します
  4. テキストエディターでタブ区切りファイルを開く
  5. すべてを選択し、Excelにコピーして貼り付けます

これは1日中私を夢中にさせています(実際、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を開くと、テキストインポートウィザードが表示されます。ウィザードの最後のステップでは、特定の列をテキストとしてインポートできるため、「00」プレフィックスが保持されます。その後、セルを任意の方法でフォーマットできます。

Excel 2007で試したところ、動作するように見えました。

さて、ExcelはCSVファイルのウィザードをポップアップしません。ファイル名を.txtに変更すると、次回Excelで[ファイル]> [開く]を実行したときにウィザードが表示されます。

フィールドの前に一重引用符を付けます。 Excelは、数字のように見えても、テキストとして扱います。

...,`005,...

編集:これは間違っています。アポストロフィトリックは、データをExcelに直接入力する場合にのみ機能します。 CSVファイルで使用すると、フィールドにアポストロフィが表示されますが、これは望ましくありません。

http://support.microsoft.com/kb/214233

CSVドキュメントの番号の前に 'を追加するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top