如何导入Excel

zzc_king 2011-08-15 01:34:22
页面是GV显示数据,怎么把Excel中的数据导入到GV,请高手指教
...全文
113 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
翘楚时代 2011-08-15
  • 打赏
  • 举报
回复
对了 还要注意要用SQL的事务回滚来提交多条同样式的SQL语句,防止出错。
    /// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static int ExecuteSqlTran(List<String> SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0;
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch(Exception ex)
{
tx.Rollback();
return 0;
}
}
}
翘楚时代 2011-08-15
  • 打赏
  • 举报
回复
    /// <summary>
/// 讀取EXCEL
/// </summary>
/// <param name="path">EXCEL文件的路徑</param>
/// <returns></returns>
public DataSet ReadExcel(string path)
{
DataSet ds = new DataSet();
string strMessage = "";
try
{
string strcon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + path + ";Extended Properties='Excel 8.0;HRD=no;IMEX=2;'";
OleDbConnection con = new OleDbConnection(strcon);
con.Open();
string strSQL = "select * from [sheet1$]";
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, con);
int flag = da.Fill(ds, "excel");
con.Close();
return ds;
}
catch (Exception ex)
{
strMessage = "錯誤訊息:1.可能是要上傳的EXCEL在打開狀態。2.也可能是" + ex.ToString();
MessageAjaxHelper.showAlert(UpdatePanel1, strMessage);
return ds;

}
}


将返回的DataSet进行转换 :DataTable dt=ReadExcel(path);
GridView1.DataSource=dt;
GridView1.DataBound();
写入数据库:
string insertSQL="insert into TableName1(a,b,c) values(";
然后遍历刚才的dt组合insert语句即可了。不过楼主要注意字段的合法性检测,如年龄要在10-100之间等。

最后提醒 office2003和2007的读取字符串不同。我这个是2003格式的。子夜的那个是2007格式的。
zzc_king 2011-08-15
  • 打赏
  • 举报
回复
哦了 3q
ajaxtop 2011-08-15
  • 打赏
  • 举报
回复
完整全在这了
<a href='http://blog.csdn.net/ajaxtop/article/details/6670449'>请查阅</a>
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzc_king 的回复:]

2楼,确实是在GV显示了 但怎么存到数据库里呢,
3楼的 有错误 说的是参数不对
[/Quote]

既然可以显示了,就说明你得到了DataTable了...
直接把DataTable中的值存入数据库就OK了啊..
可以用存储过程,或者是循环DataTable中的DataRow,生成sql语句,放入IList<string>中,循环插入数据库就行了
子夜__ 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxr0323 的回复:]

C# code
DataTable Excel_UserInfo = new DataTable();
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IME……
[/Quote]
遍历Excel_UserInfo 插入数据库。
全局变量 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzc_king 的回复:]

2楼,确实是在GV显示了 但怎么存到数据库里呢,
3楼的 有错误 说的是参数不对
[/Quote]
在用
DataSet 添加到数据。
如:
foreach (DataRow row in dataTable.Rows)
{
//SQL语句数据拼接。
//执行SQL
}
zzc_king 2011-08-15
  • 打赏
  • 举报
回复
2楼,确实是在GV显示了 但怎么存到数据库里呢,
3楼的 有错误 说的是参数不对
子夜__ 2011-08-15
  • 打赏
  • 举报
回复
 DataTable Excel_UserInfo = new DataTable();
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
string strExcel = "select * from [sheet1$]";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn))
{
DataSet ds = new DataSet();
adaptor.Fill(ds);
Excel_UserInfo = ds.Tables[0];
}


Gridview绑定Excel_UserInfo
赢在执行 2011-08-15
  • 打赏
  • 举报
回复

/// <summary>
    /// 导入数据到GridView
    /// </summary>
    /// <param name="fileUpload">文件上传控件对象</param>
/// <param name="filePath">要存放文件的服务器路径</param>
    /// <param name="gridview">目标GridView</param>
    /// <param name="keyColIndex">用于导入的主键列</param>
    /// <returns>返回没有导入的数据DataSet</returns>
    public static DataSet ExcelToGridView(FileUpload fileUpload, string filePath, GridView gridview, int keyColIndex, string strMsg)
    {
      string errMsg = string.Empty;
      DataSet ds = null ;
      try
      {
        if ( ! filePath.EndsWith("\"))
        {
          filePath += "\";
        }
        string fileName = fileUpload.FileName.Replace(".xls", "") + "_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
        string fullFileName = filePath + fileName;
        fileUpload.SaveAs(fullFileName);
        ds = ExcelToGridView(fullFileName, gridview, keyColIndex,errMsg);
        if ( errMsg != string.Empty)
        {
          errMsg += "将数据导入GridView失败." + errMsg ;
        };
      }
      catch (Exception ex)
      {
        errMsg += "上传excel文件失败." ;
      }
      strMsg = errMsg;

      return ds ;
    }
  • 打赏
  • 举报
回复

string connStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = 'C:\Excel.xls';Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection(connStr);
OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
DataSet ds = new DataSet();
myDa.Fill(ds);
DataTable dt = ds.Tables[0];

代码中你就得到了C盘中Excel.xls文件中第一页的数据了...
至于将DataTable绑定到GV中,楼主应该会的...
LMAOhuaNL 2011-08-15
  • 打赏
  • 举报
回复
http://zhangbq168.blog.163.com/blog/static/2373530520080249454473/(转)

62,054

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧