1

そのため、いくつかの xls ファイルを csv に変換しようとしていますが、一部を除いてすべてがうまく機能します。Excel 相互運用機能の SaveAs 関数は、すべての行 (空白行を含む) をエクスポートするようです。メモ帳を使用してファイルを見ると、これらの行が表示されます。(私が期待するすべての行、2つの単一引用符を含む15行、残りは空白です)。次に、このcsvを取得して目的のテーブルにインポートするストアドプロシージャを作成します(これは、手動でcsvに変換されたスプレッドシートで機能します(たとえば、開く、ファイル->名前を付けて保存など)。

コードで SavesAs に使用しているコード行を次に示します。ファイル形式として xlCSV、xlCSVWindows、および xlCSVDOS を試しましたが、すべて同じことを行います。

wb.SaveAs(aFiles(i).Replace(".xls", "B.csv"), Excel.XlFileFormat.xlCSVMSDOS, , , , False) 'saves a copy of the spreadsheet as a csv

それで、extraneuos行がcsvに表示されないようにするために必要な追加のステップ/設定はありますか?

この新しく作成された csv を開いて [名前を付けて保存] をクリックし、[csv] を選択すると、手順が再び好きになることに注意してください。

4

4 に答える 4

5

Workbook から CSV を作成すると、UsedRange に基づいて CSV が生成されます。UsedRange は、セルに書式設定を適用するだけで (コンテンツなしで) 拡張できるため、空白行が表示されるのはこのためです。(この問題により、空白の列が表示されることもあります。)

生成された CSV を開くと、コンテンツやフォーマットがないため、これらのコンテンツのないセルはすべて UsedRange に寄与しなくなります (値のみが CSV に保存されるため)。

保存する前に使用範囲を更新することで、この問題を修正できます。これは、私がVBAで書いた簡単なサブであり、トリックを実行します。このコードを使用すると、すべての書式設定が失われますが、とにかく CSV に保存しているので、それは重要ではないと考えました。VB.Net への変換はお任せします。

Sub CorrectUsedRange()
    Dim values
    Dim usedRangeAddress As String
    Dim r As Range
    'Get UsedRange Address prior to deleting Range
    usedRangeAddress = ActiveSheet.UsedRange.Address
    'Store values of cells to array.
    values = ActiveSheet.UsedRange
    'Delete all cells in the sheet
    ActiveSheet.Cells.Delete
    'Restore values to their initial locations
    Range(usedRangeAddress) = values
End Sub
于 2012-10-24T15:29:20.257 に答える
0

それだけでは不十分かもしれません。非データ セルを削除しても、csv として保存するときに空のセルとして書き出されるのを防ぐには不十分であるという Excel のバグがあるようです。

http://answers.microsoft.com/en-us/office/forum/office_2010-excel/excel-bug-save-as-csv-saves-previously-deleted/2da9a8b4-50c2-49fd-a998-6b342694681e

于 2016-04-25T01:11:10.723 に答える
0

VBA と Excel2007 でコードをテストしました - うまくいきます。

ただし、データセルの下の空のセルを太字にフォーマットすることで、ある程度複製できました。次に、csv で空の単一引用符を取得します。しかし、SaveAs を使用した場合も同様でした。

したがって、私の提案は、データ以外のセルをすべてクリアしてから、ファイルを保存することです。このようにして、少なくともこのエラーのポイントを除外できます。

于 2012-10-24T15:29:29.290 に答える