0

http 応答で大量のコンマ区切りデータを返すサーバーがあります。このデータをExcelにインポートする必要があります。

コンテンツを一時ファイルに渡し、一時ファイルをcsvとして読み取ることでこれを機能させていますが、このプロセスは非効率的です。クエリ テーブルは http 応答から直接読み取ることができますが、カンマごとに 1 つのセルに分割するのではなく、データの各行を 1 つのセルに配置します。

C# の Excel アドインから、http 応答からカンマ区切りのデータを直接 Excel に読み込むことはできますか?

ありがとう!

    public static void URLtoCSV(string URL, Excel.Worksheet destinationSheet, Excel.Range     destinationRange, int[] columnDataTypes, bool autoFitColumns)
    {
        destinationSheet.QueryTables.Add(
            "URL;" + URL,
        destinationRange, Type.Missing);
        destinationSheet.QueryTables[1].Name = URL;
        destinationSheet.QueryTables[1].FieldNames = true;
        destinationSheet.QueryTables[1].RowNumbers = false;
        destinationSheet.QueryTables[1].FillAdjacentFormulas = false;
        destinationSheet.QueryTables[1].PreserveFormatting = true;
        destinationSheet.QueryTables[1].RefreshOnFileOpen = false;
        destinationSheet.QueryTables[1].RefreshStyle = XlCellInsertionMode.xlInsertDeleteCells;
        destinationSheet.QueryTables[1].SavePassword = false;
        destinationSheet.QueryTables[1].SaveData = true;
        destinationSheet.QueryTables[1].AdjustColumnWidth = true;
        destinationSheet.QueryTables[1].RefreshPeriod = 0;
        destinationSheet.QueryTables[1].Refresh(false);

        if (autoFitColumns == true)
            destinationSheet.QueryTables[1].Destination.EntireColumn.AutoFit();

    }
4

1 に答える 1

3

参照するよりも簡単な解決策は、URL の代わりに「TEXT」のタイプを使用することです。TEXT は、HTTP ソースからのものを含め、すべての CSV インポートをサポートします。URL は、何よりもスクリーン スクレイピングを処理するように設計されているようです。

たとえば、あなたの場合:

destinationSheet.QueryTables.Add("URL;" + URL,

になる

destinationSheet.QueryTables.Add("TEXT;" + URL,

そして、この投稿に出くわして同じ質問をしているが、Excel で VB スクリプトを使用している場合、完全なソリューションは次のようになります。

' Load new data from web
With ActiveSheet.QueryTables.Add(Connection:="TEXT;http://yourdomain.com/csv.php", Destination:=Range("$A$1"))
.TextFileCommaDelimiter = True
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = True
.Refresh BackgroundQuery:=False
End With
于 2013-02-11T02:14:37.393 に答える