Excel QueryTables.Add from URL 逗号分隔

本文关键字:分隔 URL from QueryTables Add Excel | 更新日期: 2023-09-27 17:55:09

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

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

是否可以从 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();
    }

Excel QueryTables.Add from URL 逗号分隔

比您引用的解决方案更简单的解决方案是使用"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