0

これは私の前の質問に関連しています。Excelで、テキストファイル(複数のピボットテーブルで使用)への外部データ接続を更新して、正しいデータソースをポイントし、Excelワークブックとテキストファイルが別のディレクトリ/コンピューターにコピーされたときにデータを更新できるようにしようとしています。 。(テキストファイルへのパスが相対的であるかのように機能する必要があります。)

データソースはタブ区切りのテキストファイルで、最初の列にヘッダーがあります。ODBC接続文字列のパスを変更できるコードがありますが、データを更新しようとすると、Excelはすべてをテキストとしてインポートし、一部の列を元の数値のままにしません。

Public Sub Test()
    Dim wb As Excel.Workbook
    Dim pc As PivotCache
    Dim path As String

    Set wb = ActiveWorkbook
    path = wb.path

    For Each pc In wb.PivotCaches
        'Debug.Print pc.Connection
        pc.Connection = "ODBC;DBQ=" & path & ";DefaultDir=" & path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes"

    Next
End Sub

ゼロに変更MaxScanRowsしてみました。どこかで読んだところ、Excelがすべての行をスキャンしてデータ型を推測していましたが、それは役に立たなかったようです。

元の接続情報は次のとおりです。

接続文字列:

DefaultDir=C:/directoryPath;Driver={Microsoft Text Driver (*.txt; *.csv)};
  DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;
  SafeTransactions=0;Threads=3;UserCommitSync=Yes;

コマンドテキスト:

SELECT *
FROM tableName.txt tableName

PivotTableウィザード(外部データ-> MSテキストドライバー)を使用して接続を作成したときに、すべてのインポート/解析情報(タブ区切り、最初の行の列ヘッダー、推測データ型など)を設定しました。

(1)行を調べてデータ型を把握するようにExcelに指示する、(2)各列のデータ型を手動でコーディングする、(3)最初に使用されたものと同じデータ型を保持する、または( 4)データが更新された後、マクロのピボットテーブルを調べて、すべての数値をテキストではなく数値に変換しますか?明らかに、(1)または(3)は最も簡単で最も理にかなっているように見えますが、他のオプションを試してみます。

4

1 に答える 1

1

要件を考えると、schema.ini を使用するのが最善の策と思われます。

例えば:

[mycsv.csv]
Format=Delimited(|)
NumberDigits=2
CurrencyThousandSymbol=,
CurrencyDecimalSymbol=.
CurrencyDigits=2
DateTimeFormat="yyyy-mm-dd"

Col1=ADate Date
Col2=AText Text

Schema.ini ファイル (テキスト ファイル ドライバー)

于 2012-08-27T16:35:40.200 に答える