CSVをインポートするときにNumbersが番号を変換しないようにするにはどうすればよいですか?


12

NumbersでCSVファイルを開くと、数値として認識されるフィールドを先頭のゼロを取り除いたり、日付として認識されるものを変換したりすることで、「便利に」変換します。

たとえば、Numbersスプレッドシート005566778899にUPCコードを入力すると、Numbersはそれを5566778899に自動的に変換します。これは私が望むものではありません...

しかし、がNumbers 使用する方法では、ゼロが先行する何千ものUPCコードでデータベースを開きます。それらのいくつかは、Numbersも再フォーマットする日付を含んでいます。基本的に、これらの機能は必要ありません。コンテンツをそのままにしておきます。

CSVファイルを開いたときに数値を取得してデータをそのままにするにはどうすればよいですか?

インポート後にフィールドをテキストに変換しても、データはすでに乱雑になっているため、役に立ちません...


「データはすでに乱用されている」とはどういう意味ですか?ファイルを開いたにテキスト変換するということですか?
ダニエル

ファイルを開くと、ExcelとNumbersの両方がすべてのデータで変化します。ですから、ファイルを開く前に何をする必要があります。
henryaaron 2012年

7年後、これはまだ大きな穴のようです。csv-> Numbers-> csvからの往復がセルを変更することは問題です。先行ゼロは良い例です。もう1つはパーセンテージです(たとえば、20%は0.2になります)。もう1つは科学表記法です(たとえば、1E-2は0.01になります)。二重引用符で囲むと効果がありません。アポストロフィを前に付けると、文字どおりに解釈されます。最良のオプションは、インポート前にすべてにアポストロフィを付け、エクスポート後にすべての最初のアポストロフィを取り除くことです...
Heath Raftery

回答:


7

CSVファイルのフィールドがアポストロフィ(')で始まる場合、ExcelとNumbersはどちらもフィールドをテキストとして扱い、数値形式で表示しません。

CSVファイルは、数値フィールドを二重引用符で囲むことでテキストのレンダリングを強制しようとしているように見えますが、数値とExcelは、二重引用符の数値を文字列として処理する必要があるというヒントを取り入れていないようです。トリックは、CSVファイルを変更して、数値フィールドに「二重引用符で囲まれた」トリックではなく「単一アポストロフィで始まる」トリックを使用するようですが、句読点(カンマを含む)を含むテキストフィールドには二重引用符を使用します引用符、改行など)。

CSVファイルを処理できるようにするには、Automatorアプリケーションを作成します。

Automatorで、新しいアプリケーションを作成します。

これには、アクションを1つ実行します:シェルスクリプトの実行(入力を引数として渡す)。スクリプトは次のとおりです。

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

結果のアプリケーションをデスクトップに保存します。Numbersで使用するCSVファイルをアプリケーションアイコンにドロップすると変換されます。これにより、Numbersはフィールドの数値をリテラル数値として保持し、フォーマットしたり情報を破棄したりしないでください。

これを試す前にデータをバックアップしてください。レコードフィールドで特に奇妙に作成された文字列が、ここで結果を破棄する可能性があります。

ここに画像の説明を入力してください


この作業を行うには、何らかの相互作用が必要なようです。この議論はチャットで行う
ダニエル

0

具体的には、先行ゼロを処理する方法を次に示します。あなたの質問はオートコレクトよりもセルのフォーマットについてだと思います。

前述のように、自動修正機能自体はシステムアイテムであり、システム環境設定から無効にする必要があります。


セルをこの形式に変換しても、データは既に
乱雑

1
セルをフォーマットした場合、ゼロが戻ってくることを期待していました-数値がインポート時にゼロを破壊的に削除し、本当にひどい場合。インポートする前にセルをフォーマットする必要があるかもしれません。
アダムEberbach

間違いなくそうです。
henryaaron 2012年

0

Huzzah、この回答などのおかげで、次の利点を持つ方法があります。

  • 数値だけでなくExcelでも機能
  • 自動化できます。
  • 数字では見えない。
  • インポートからエクスポートまで、影響のないCSVファイルを生成します。

トリックは、各フィールドの前にアポストロフィを付けたり、二重引用符で囲んだりするのではなく、プレフィックスを付け="たり、サフィックスを付けたりすること"です。インポート時には、Numbersはフィールドの内容を文字列として扱い、エクスポート時にはプレフィックスとサフィックスを削除します。

次の名前のファイルを前処理する便利なライナーがありますmy.csv

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

最初のsedコード="は各行の先頭に配置し、各コンマを",="に変更してから、各行をで終了し"ます。2つ目sedは、Numbersが窒息しているため、空のフィールドをすべて削除します。最後に、tmp.csvダブルクリックしたりopen、Numbersにインポートするために渡したりできるファイルを書き込みます。

実際には、コンマが含まれているフィールドは文字化けします。数値で始まるフィールドのみをラップする方がよい場合がありますが、各行の開始と終了、および正規表現のバージョンに注意する必要があります。これはmacOSで行います:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

つまり、行の先頭またはコンマ、数字、次にコンマではない任意の数の文字、次に行の末尾または別のコンマと一致します。同じ最初と最後ではなく、に包まれた中位ビットと交換="して"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.