httpWebRequest下载并解析excel文件?

时间:2014-07-15 21:49:39

标签: c# excel

我正在寻找一种方法,使用httpWebRequest从URL下载excel文件并以某种方式解析 - 这是否意味着将其转换为.csv文件,以便我可以简单地使用TextFieldParser或将其保留为excel文件,我不知道。

private byte[] GetExcelFile()
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("url_To_Excel_File"); 
            httpWebRequest.ContentType = "application/vnd.ms-excel";
            httpWebRequest.Method = "GET";

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

            try
            {

                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var contents = streamReader.ReadToEnd();
                    return contents;
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
         }

我的理解是contents应该是一个字节数组?如何正确下载此excel文件并解析响应?

1 个答案:

答案 0 :(得分:3)

如何使用WebClient类下载Excel文件,使用DownloadFile()代替DownloadData()(简单)。

string destFilename = HttpContext.Current.Server.MapPath("~/YourExcelFile.xlsx");
WebClient client = new WebClient();
client.DownloadFile("http://www.blabla.com/YourExcelFile.xlsx", destFilename);

这应该将文件下载到您的应用程序的根目录。

下一步是读取文件。根据我的经验,以编程方式读取Excel文件的最简单方法就是使用SQL / OleDB查询它。

如何将第一张文件读入DataTable的示例:

string connectionString = GetExcelConnectionString(destFilename);

string sheetName = GetFirstSheet(filePath);

OleDbConnection excelCon = new OleDbConnection(connectionString);
OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select * from [{0}]", sheetName), excelCon);

DataTable dataTable = new DataTable("ExcelDocument");
adapter.Fill(dataTable);

获取连接字符串的辅助函数:

// Currently only supports Excel 12.0 (.xlsx files), the connection string for .xls is a little different.
public string GetExcelConnectionString(string filePath)
{
    return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;";
}

帮助程序读取文件中第一张纸的名称:

public string GetFirstSheet(string filePath)
{
    string connectionString = GetExcelConnectionString(filePath);

    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        DataTable dtSheet = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        return dtSheet.Rows[0]["TABLE_NAME"].ToString();
    }

    return String.Empty;
}

现在你应该在DataTable中拥有该文件的内容,这使得用数据做任何你想做的事都很简单。

请注意,这只是为了给你一个想法,可能并不完美。您可能希望在处理后进行清理 - 例如,从应用程序的根目录中删除excel文件。