使用EPPlus打开客户端Excel文件

时间:2013-07-30 19:06:44

标签: c# excel epplus

我正在编写一个程序,其中必须在客户端计算机上创建一个excel文件,然后,在他们保存并更新它之后,我需要再次导入它并将更改应用到我的数据库。它的导出位工作正常,但是当我从Web应用程序导入时,我的工作簿中得到零工作表。如果我在我的开发机器上运行它,即网站运行在文件所在的同一台机器上,那么它可以正常工作。

我的代码如下:

try
    {
        Productsfile = new FileInfo(PathandFileName);
    }
    catch (Exception ex)
    {
        lblStatus.Text = string.Format("Error getting file info {0}", ex.Message);
        return;
    }

    lblStatus.Text += "File Opened succesfully " + Productsfile.FullName + Environment.NewLine;

    //Open and read file
    try
    {
        using (ExcelPackage datafile = new ExcelPackage(Productsfile))
        {

            ExcelWorkbook wkb = datafile.Workbook;


            if (wkb != null)
            {

                lblStatus.Text += string.Format("The workbook is not null and there are {0} worksheets", wkb.Worksheets.Count) + Environment.NewLine;

我已经确认代码到达最后一次标签更新,这告诉我工作簿中没有工作表,但重要的是工作簿本身不为空。

当我们创建导出时,使用了以下代码,它将数据流从服务器传输到客户端 - 我想知道是否需要反转它:

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;  filename=Products.xlsx");
        Response.BinaryWrite(pck.GetAsByteArray());
        Response.End();

1 个答案:

答案 0 :(得分:4)

是的,我相信我找到了答案:

1)从fileupload控件获取文件详细信息 2)将其转换为内存流 3)使用内存流

创建包

代码如下:

if (FileUpload1.HasFile)
        {

            HttpPostedFile file = Request.Files[0];
            myLabel.Text = file.FileName;
            MemoryStream mem = new MemoryStream();
            mem.SetLength((int)file.ContentLength);

            file.InputStream.Read(mem.GetBuffer(), 0, (int)file.ContentLength);

            ExcelPackage package = new ExcelPackage(mem);


            ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
            myLabel.Text += " " + worksheet.Name;

        }