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