【问题标题】:Excel QueryTables.Add from URL Comma DelimitedExcel QueryTables.Add 从 URL 逗号分隔
【发布时间】:2013-01-06 08:50:14
【问题描述】:

我有一个服务器,它在 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();

    }

【问题讨论】:

标签: c# excel


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多