• 读取Excel数据到DataTable


    代码
    /// <summary>
    /// 获取指定路径、指定工作簿名称的Excel数据:取第一个sheet的数据
    /// </summary>
    /// <param name="FilePath">文件存储路径</param>
    /// <param name="WorkSheetName">工作簿名称</param>
    /// <returns>如果争取找到了数据会返回一个完整的Table,否则返回异常</returns>
    public DataTable GetExcelData(string astrFileName)
    {
    string strSheetName = GetExcelWorkSheets(astrFileName)[0].ToString();
    return GetExcelData(astrFileName, strSheetName);
    }
    代码
    /// <summary>
    /// 返回指定文件所包含的工作簿列表;如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空
    /// </summary>
    /// <param name="strFilePath">要获取的Excel</param>
    /// <returns>如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空</returns>
    public ArrayList GetExcelWorkSheets(string strFilePath)
    {
    ArrayList alTables
    = new ArrayList();

    OleDbConnection odn
    = new OleDbConnection(GetExcelConnection(strFilePath));
    odn.Open();

    DataTable dt
    = new DataTable();

    dt
    = odn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

    if (dt == null)
    {
    throw new Exception("无法获取指定Excel的架构。");
    }

    foreach (DataRow dr in dt.Rows)
    {
    string tempName = dr["Table_Name"].ToString();

    int iDolarIndex = tempName.IndexOf('$');

    if (iDolarIndex > 0)
    {
    tempName
    = tempName.Substring(0, iDolarIndex);
    }

    //修正了Excel2003中某些工作薄名称为汉字的表无法正确识别的BUG。
    if (tempName[0] == '\'')
    {
    if (tempName[tempName.Length - 1] == '\'')
    {
    tempName
    = tempName.Substring(1, tempName.Length - 2);
    }
    else
    {
    tempName
    = tempName.Substring(1, tempName.Length - 1);
    }

    }
    if (!alTables.Contains(tempName))
    {
    alTables.Add(tempName);
    }
    }

    odn.Close();

    if (alTables.Count == 0)
    {
    return null;
    }

    return alTables;
    }
    代码
    /// <summary>
    /// 获取指定路径、指定工作簿名称的Excel数据
    /// </summary>
    /// <param name="FilePath">文件存储路径</param>
    /// <param name="WorkSheetName">工作簿名称</param>
    /// <returns>如果争取找到了数据会返回一个完整的Table,否则返回异常</returns>
    public DataTable GetExcelData(string FilePath, string WorkSheetName)
    {
    DataTable dtExcel
    = new DataTable();
    OleDbConnection con
    = new OleDbConnection(GetExcelConnection(FilePath));
    OleDbDataAdapter adapter
    = new OleDbDataAdapter("Select * from [" + WorkSheetName + "$]", con);

    //读取
    con.Open();
    adapter.FillSchema(dtExcel, SchemaType.Mapped);
    adapter.Fill(dtExcel);
    con.Close();
    dtExcel.TableName
    = WorkSheetName;

    //返回
    return dtExcel;
    }
    代码
    /// <summary>
    /// 获取链接字符串
    /// </summary>
    /// <param name="strFilePath"></param>
    /// <returns></returns>
    public string GetExcelConnection(string strFilePath)
    {
    if (!File.Exists(strFilePath))
    {
    throw new Exception("指定的Excel文件不存在!");
    }
    return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + ";Extended properties=\"Excel 8.0;Imex=1;HDR=Yes;\"";

    //@"Provider=Microsoft.Jet.OLEDB.4.0;" +
    //@"Data Source=" + strFilePath + ";" +
    //@"Extended Properties=" + Convert.ToChar(34).ToString() +
    //@"Excel 8.0;" + "Imex=1;HDR=Yes;" + Convert.ToChar(34).ToString();
    }
  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/xiebin1986/p/1687082.html
Copyright © 2020-2023  润新知