以下网址的C#代码,说是获取excel所以表单的数据,但是为什么只能获取sheet1?

http://blog.csdn.net/mailun/article/details/8453038,不明白那个代码是控制选择不同的sheet的,而且该代码好像是从sh... http://blog.csdn.net/mailun/article/details/8453038,不明白那个代码是控制选择不同的sheet的,而且该代码好像是从sheet1的第二行开始提取,第一行会忽略,这又是怎么回事?有人能讲解下嘛? 展开
 我来答
玩转数据处理
推荐于2016-09-26 · 数据处理,Python,dotnet
玩转数据处理
采纳数:1613 获赞数:3794

向TA提问 私信TA
展开全部
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Microsoft Excel files(*.xls)|*.xls;*.xlsx";//过滤一下,只要表格格式的
ofd.InitialDirectory = "c:\\";
ofd.RestoreDirectory = true;
ofd.FilterIndex = 1;
ofd.AddExtension = true;
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;
ofd.ShowHelp = true;//是否显示帮助按钮
DataSet ds = new DataSet();//ds应该在这里new才对
if (ofd.ShowDialog() == DialogResult.OK)
{
    string DBString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + ofd.FileName + ";Extended Properties=Excel 12.0";
    OleDbConnection con = new OleDbConnection(DBString);
    con.Open();
    DataTable datatable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

    //获取表单,原始的是:Sheet1,Sheet2,Sheet3
    for (int i = 0; i < datatable.Rows.Count; i++)
    {

        //获取表单的名字
        String sheet = datatable.Rows[i][2].ToString().Trim();
        OleDbDataAdapter ole = new OleDbDataAdapter("select * from [" + sheet + "]", con);
        //DataSet ds = new DataSet(); //这个ds不要在这里new生成
        ole.Fill(ds);

        //输出表格里面的内容,我这里就两列数据,如果数据列数不确定就需要写循环了:Rows.Count
        foreach (DataRow col in ds.Tables[0].Rows)
        {
            Console.WriteLine(col[0].ToString());
            Console.WriteLine(col[1].ToString());
        }
    }
    con.Close();
}
追问

您的代码好像只是调整了DatasetS实例化的位置啊。我直接把foreach的语句改成

可以把sheet1的内容存在str数组,现在问题是如何把那个excel表中sheet2中的内容也按这个方法存入一个数组。

追答
if (ofd.ShowDialog() == DialogResult.OK)
{
    //获取表单,原始的是:Sheet1,Sheet2,Sheet3
    for (int i = 0; i < datatable.Rows.Count; i++)
    {
        //获取表单的名字
        String sheet = datatable.Rows[i][2].ToString().Trim();
        OleDbDataAdapter ole = new OleDbDataAdapter("select * from [" + sheet + "]", con);
        ole.Fill(ds);
    }
    con.Close();
}
Dictionary<string, List<string>> data = new Dictionary<string, List<string>>();
foreach (DataTable table in ds.Tables)
{
    if (!data.ContainsKey(table.TableName))
    {
        data.Add(table.TableName, new List<string>());
    }
    for (int i = 0; i < table.Rows.Count; i++)
    {
        string temp = string.Empty;
        for (int j = 0; j < table.Columns.Count; j++)
        {
            temp += string.Format("{0},", table.Rows[i][j].ToString());
        }
        data[table.TableName].Add(temp.Substring(0,temp.LastIndexOf(",")));
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式