0

通常のExcelシートに変換したいセミコロン区切り文字のCSVがあります。以下のコードでこれを行うことができましたが、元のファイルでゼロで始まらない小数点付きの数値が小数点なしの数値としてExcelに表示されるため、間違いを犯したに違いありません。ExcelでCSVを手動で開くと、結果は良好になるため、スクリプトを使用してCSVを実行することの副作用である必要があります。

例えば:

CSVには次の行があります。

2013-03-10 17:00:15; アイドル; 2,272298 ;; 0,121860

Excelシートでは、これは次のようになります。

2013-03-10 17:00 | アイドル| 2.272.298 | | 0,121860

Excelで手動で開くと、次のようになります。

2013-03-10 17:00 | アイドル| 2,272298 | | 0,121860

Excelで小数を小数として保持するために何を変更できるか/変更する必要があるかを誰かに教えてもらえますか?おそらく、どの記号が小数点記号を表すか、またはヨーロッパ形式を使用するように強制する引数をExcelに伝える方法はありますか?

よろしく、ニコ

これは私が現在持っているスクリプトです。ここで、csvFileは元のファイルへのフルパスをexcelFile含む文字列であり、は新しいExcelシートを保存する場所へのフルパスを含む文字列です。

Set objExcel = CreateObject("Excel.Application")                   'use excel  
objExcel.Visible = true                                            'visible  
objExcel.displayalerts=false                                       'no warnings 

objExcel.Workbooks.Open(csvFile)                                   'open the file  
objExcel.ActiveWorkbook.SaveAs excelFile, -4143, , , False, False  'save as xls  
objExcel.Quit                                                      'close excel
4

4 に答える 4

1

csvFileが存在するフォルダーにschema.iniファイルを作成し、ここに記載されているルールに従って記述します。

さらに読む:インポートテキストファイル

于 2013-03-21T13:02:45.767 に答える
0

一般に、Excelはシステムの地域設定を尊重します。ただし、CSVインポートでは、特にインポートされたファイルの拡張子が。の場合、「正しい」形式について独自の考えを持っていることがあります.csv

次のことを試してみます。ファイルの名前を.txtまたはに変更し、次の.tsvようにインポートします。

objExcel.Workbooks.OpenText csvFile, , , 1, 1, False, False, True
于 2013-03-21T15:24:38.127 に答える
0

私は回避策を作りました。次に、CSV ファイルのコピーを作成します。ここで、すべてのカンマとそれに続く数字をポイントで置き換えます。あまり効果的ではありませんが、Excel に必要なものを提供し、私のような経験の浅いプログラマーが使用するのに十分簡単です。その際、ある大学から、最初の列 (この場合はタイムスタンプ) に重複する値を含む空白とエントリも削除するように依頼されました。

結果はこのスクリプトでした

    'csvFile   is a string with the full path to the file. e.g. "C:\\Program Files\\Program\\data.csv"
    'tempFile  is a string with the full path to the file. e.g. "C:\\Temp\\temp.csv"
    'excelfile is a string with the full path to the file. e.g. "D:\\Data\\sheet.xls"

    Set fs=CreateObject("Scripting.FileSystemObject")
    Set writeFile = fs.CreateTextFile(tempFile,True)
    Set readFile = fs.OpenTextFile(csvFile)

    ' regular expression to remove leading whitespaces
    Set regular_expression = New RegExp
        regular_expression.Pattern = "^\s*"
        regular_expression.Multiline = False

    ' regular expression to change the decimal seperator into a point        
    Set regular_expression2 = New RegExp
        regular_expression2.Global = True
        regular_expression2.Pattern = ",(?=\d)"
        regular_expression2.Multiline = False

    'copy the original file to the temp file and apply the changes
    Do Until readFile.AtEndOfStream
        strLine= readFile.ReadLine
        If (StrComp(current_timestamp,Mid(strLine, 1, InStr(strLine,";")),1)<>0) Then
        If (Len(previous_line) > 2) Then
            previous_line = regular_expression2.replace(previous_line,".")
            writeFile.Write regular_expression.Replace(previous_line, "") & vbCrLf
        End if
        End if
        current_timestamp = Mid(strLine, 1, InStr(strLine,";"))
        previous_line = strLine
    Loop
    readFile.Close
    writeFile.Close

    Set objExcel = CreateObject("Excel.Application")    ' use excel
    objExcel.Visible = true                             ' visible
    objExcel.displayalerts=false                        ' no warning pop-ups
    objExcel.Workbooks.Open(tempFile)                   ' open the file
    objExcel.ActiveWorkbook.SaveAs excelfile, -4143, , , False, False   'save as excelfile
    fs.DeleteFile tempFile                              ' clean up the temp file

これが他の誰かにも役立つことを願っています。

于 2013-03-22T09:28:08.873 に答える
0

いくつかのアプローチが考えられますが、私が好むものを取り上げます。

  1. マクロの記録を開始する
  2. 新しいブックを作成する
  3. そのワークブックから [データ] > [テキストから] に移動し、そこで CSV ファイルを選択すると、値の区切り記号、小数点の記号、桁区切り記号に関するすべての必要な設定を行うことができます。また、列ごとに特定のデータ型を選択することもできます。
  4. CSV コンテンツが追加されたら、[データ] > [接続] に移動し、接続を削除します。データはワークシートに残りますが、アクティブな接続はなくなります。
  5. ワークブックを xls という名前で保存します
  6. 記録を停止する

ここで、スクリプトを好みに合わせて微調整します。

于 2013-03-21T13:06:33.060 に答える