0

我有一个在 http 响应中返回大量逗号分隔数据的服务器。我需要将此数据导入excel。

我通过将内容传递给临时文件然后将临时文件作为 csv 读取来实现这一点,但这个过程似乎效率低下。查询表可以直接从 http 响应中读取,但它将每行数据放入一个单元格中,而不是每个逗号分隔为一个单元格。

是否可以将来自 http 响应的逗号分隔数据直接从 C# excel 加载项读取到 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

比您引用的更简单的解决方案是使用“TEXT”类型而不是 URL。TEXT 支持所有 CSV 导入,包括来自 HTTP 源的导入。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 回答