使用exceldatareader将多个Excel工作表导入gridview

时间:2017-03-31 03:11:05

标签: c# asp.net excel gridview exceldatareader

目前我可以使用exceldatareader库将excel文件导入gridview。现在,我想进一步改进将多个Excel工作表导入gridview。这是我想要做的输出。 ImageOutput  我能够将excel表名称放入下拉列表中,但我不知道如何从第二张表中获取数据。我试过谷歌,但仍然无法找到任何答案。

现在我的问题是如何从下拉列表中选择工作表名称并在gridview中显示工作表数据。

以下是我的代码:

public partial class ReadExcel : System.Web.UI.Page
{
    DataSet result;
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnLoad_Click(object sender, EventArgs e)
    {
        dataUpload();
    }
    protected void dataUpload()
    {
        if (FileUpload1.HasFile)
        {
            string path = Path.GetFileName(FileUpload1.PostedFile.FileName);
            string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
            string filepath = Server.MapPath("~/" + path);
            FileUpload1.SaveAs(filepath);
            FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read);
            //for excel 2003
            // IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
            // for Excel 2007
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            excelReader.IsFirstRowAsColumnNames = true;
            result = excelReader.AsDataSet();
            ddlSheet.Items.Clear();
            foreach(DataTable dt in result.Tables)
            {
                ddlSheet.Items.Add(dt.TableName);
            }
            //excelReader.IsFirstRowAsColumnNames = true;
            while (excelReader.Read())
            {
                // int i = excelReader.GetInt32(0);
                GridView1.DataSource = result;
                GridView1.DataBind();
            }

        }
        else
        {
            lblError.Text = "Unable to upload the selected file. Please check the selected file path or confirm that the file is not blank!";
        }
    }

    protected void ddlSheet_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridView1.DataSource = result;
        GridView1.DataBind();
    }
}

2 个答案:

答案 0 :(得分:0)

嗯,有趣的是。我从未尝试过你在这里描述的内容,但我认为下面的链接将帮助你开始。

https://msdn.microsoft.com/en-us/library/aa480727.aspx?f=255&MSPPError=-2147217396

此外,下面是一小段代码,可以帮助您实现目标。

您可以使用此链接http://code.google.com/p/excellibrary/中的excel库。实际上这个页面上提供了一个示例代码,它演示了如何从excel文件中读取。

using ExcelLibrary.SpreadSheet;

// open xls file
Workbook book = Workbook.Load(file);
Worksheet sheet = book.Worksheets[0];

// iterate with a proper condition, at the moment it will iterate with a given length!
for (int i = 0; i < length; i++)
{
  comboBox.Items.Add(sheet.Cells[i,column_index].Value);
}

答案 1 :(得分:0)

您的result是一个DataSet个对象,其Tables[]属性,ExcelDataReader将每个工作表存储为一个表格。
所以,我认为你应该改变

GridView1.DataSource = result;

GridView1.DataSource = result.Tables[ddlSheet.SelectedText];