Импортируйте несколько листов Excel в gridview с помощью exceldatareader

В настоящее время я могу импортировать файл Excel в gridview с помощью библиотеки Exceldatareader. Теперь я хочу усовершенствовать импорт нескольких листов Excel в gridview. Это вывод, который я хочу сделать. ImageOutput Мне удалось получить имя листа Excel в раскрывающемся списке, но я понятия не имею, как получить данные со второго листа. Я попробовал Google, но до сих пор не нашел ответа.

Итак, теперь моя проблема, как я могу выбрать имя листа из выпадающего списка и показать эти данные листа в виде сетки.

Ниже мой код:

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 ответа

Ваш result это DataSet объект, который имеет Tables[] собственность и ExcelDataReader сохраняет каждый лист в виде таблицы.
Итак, я думаю, что вы должны изменить

GridView1.DataSource = result;

в

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

Хм, интересно. Я никогда не пробовал то, что вы описали здесь, но я думаю, что ссылка ниже поможет вам начать.

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

Кроме того, ниже приведен небольшой пример кода, чтобы все заработало.

Вы можете использовать библиотеку Excel по этой ссылке http://code.google.com/p/excellibrary/. На этой странице приведен пример кода, демонстрирующий, как читать из файла 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);
}
Другие вопросы по тегам