来自URL逗号分隔的Excel QueryTables.Add

时间:2013-01-22 23:51:31

标签: c# excel

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

    }

1 个答案:

答案 0 :(得分:2)

比您引用的解决方案更简单的方法是使用“TEXT”类型而不是URL。 TEXT支持所有CSV导入,包括HTTP源。 URL似乎旨在处理屏幕抓取而不是其他任何事情。

e.g。在你的情况下:

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