读取excel 有些列取不到值 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/chazikai24/archive/2010/07/27/5769318.aspx读csv跟读excel是一样的道理。要么手动改,要么加空格. 读取方式 string conStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + "; Extended Properties=\"Excel 8.0;HDR=YES\";";设置断点发现 ,一个记录中,某些字段是空的 ,挺纳闷的 。 检查单元格格式打开EXCEL,遍历查看单元格值 1,连接字符串里加HDR=No;IMEX=1必须方法2.打开Excel,把每一个单元格的前面加'单引号, http://wenku.baidu.com/view/d0aa826648d7c1c708a145cb.html看了你就明白了 excel 字段中的数据类型不一致导致 的建议 先看一下http://wenku.baidu.com/view/d0aa826648d7c1c708a145cb.html 或 直接将excel 转换为csv 格式 逐行读取 这样就不会有丢失了 我们都是这样写都是可以读取的,不知道不是怎么测试的。最好的方法是把Excel里面的所有单元格设置为文本格式,或者在每个单元格前面加'这些方法都是可行的。你如果不行,请把你的xls发到[email protected] # public DataSet GetDataSet(string filePath) # { # string Connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"); # OleDbConnection Conn = new OleDbConnection(Connstr); # //创建ArrayList对象 存放所有sheetname # ArrayList sheetNamelist = new ArrayList(); # //获取配置Excel中sheet总数(这里是根据项目需求配置的) 如果需要导入Excel表格所有sheet数据则将此代码删除 # int sheetCount = Convert.ToInt32(ConfigurationManager.AppSettings["sheetCount"].ToString()); # DataSet dsExcel = new DataSet(); # try # { # if (Conn.State == ConnectionState.Closed) # { # Conn.Open(); # } # DataTable dtExcelSchema = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); # string sheetName = string.Empty; # if (dtExcelSchema.Rows.Count > sheetCount) # { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('很抱歉!你上传Excel文件sheet总数过多不能大于10个sheet..!! ') # // --></mce:script>"); # return; # } # else # { # for (int j = 0; j < dtExcelSchema.Rows.Count; j++) # { # sheetName = String.Format("Sheet{0}$", j + 1); # sheetNamelist.Add(sheetName); # } # } # # } # catch (Exception ex) # { # throw new Exception(ex.Message.ToString(), ex); # } # finally # { # Conn.Close(); # } # try # { # string strSQL = string.Empty; # for (int i = 0; i < sheetNamelist.Count; i++) # { # strSQL = "select * from [" + sheetNamelist[i].ToString() + "]"; # OleDbDataAdapter da = new OleDbDataAdapter(strSQL, Conn); # DataTable dtExcel = new DataTable(sheetNamelist[i].ToString()); # da.Fill(dtExcel); # dsExcel.Tables.Add(dtExcel); # } # return dsExcel; # } # catch (Exception ex) # { # throw new Exception(ex.Message.ToString(), ex); # } # } # # //从Excel 表中取出数据 将取出来的数据插入到数据库中 # public void InsertData(DataSet ds) { # string strSQL=string.Empty; # if (ds.Tables[0].Rows.Count > 0) # { # for (int j = 0; j < ds.Tables.Count; j++) # { # for(int i=0;i<ds.Tables[j].Rows.Count;i++) # { # DataRow dr=ds.Tables[j].Rows[i]; # //组名 # string groupname = dr["组名"].ToString().Trim(); # //联系人 # string contactName = dr["联系人"].ToString().Trim(); # //手机号码 # string mobile = dr["手机号码"].ToString().Trim(); # //公司名称 # string companyName = dr["公司名称"].ToString().Trim(); # //公办号码 # string officeNum = dr["办公号码"].ToString().Trim(); # //家庭号码 # string homeNum = dr["家庭号码"].ToString().Trim(); # //邮箱 # string Email = dr["邮 箱"].ToString().Trim(); # //联系地址 # string address = dr["联系地址"].ToString().Trim(); # //创建时间 # string createtime = dr["创建时间"].ToString().Trim(); # //性别 # string Sex = dr["性别"].ToString().Trim(); # //手机套餐类型 # string mobileType = dr["手机套餐类型"].ToString().Trim(); # //是否开通通信助理 # string isOpen = dr["是否开通通信助理"].ToString().Trim(); # //SQL 语句 # strSQL = "insert into msm_Excel(groupName,Mobile,Name,companyName,officeNum,homeNum,Emial,address,Createtime,Sex,mobileType,isOpen)values('" + groupname + "','" + mobile + "','" + contactName + "','" + companyName + "','" + officeNum + "','" + homeNum + "','" + Email + "','" + address + "','" + createtime + "','" + Sex + "','" + mobileType + "','" + isOpen + "')"; # try # { # int n = SQLHelper.SqlDataExecute(strSQL); # if (n > 0) # { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('数据插入成功!') # // --></mce:script>"); # Label1.Text = "一共成功插入" + ds.Tables[j].Rows.Count.ToString() + "条数据"; # } # else # { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('服务器繁忙!请稍候再试..!') # // --></mce:script>"); # } # } # catch (Exception ex) # { # throw ex; # } # } # } # } # # else { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('此Excel文件中无数据!!!') # // --></mce:script>"); # } # # } # //调用 # //获取上传文件名 # string fileName = FileUpload1.FileName; # //判断是否存在上传文件 # if (FileUpload1.PostedFile.FileName.Length == 0) { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('请选择你要上传的Excel文件!!') # // --></mce:script>"); # } # //判断上传的文件类型是否正确 # else if (!Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower().Equals(".xls") && !Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower().Equals(".xlsx")) # { # Page.RegisterStartupScript("", "<script>alert('很抱歉!你上传的文件类型不正确!只能上传Excel类型的文件!')</script."); # } # else # { # //获取上传的文件路径 # filePath = Server.MapPath("TxtFiles\\") + DateTime.Now.ToString("yyyyMMddhhmmss") + fileName; # this.FileUpload1.PostedFile.SaveAs(filePath); # ds = GetDataSet(filePath); # InsertData(ds); # # } <%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { String ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Data.xls") + "; Extended Properties=\"Excel 8.0;HDR=No;IMEX=1;\""; OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); OleDbCommand cmd = new OleDbCommand("Select * From [Sheet1$C3:FP5785]", cn); OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); GridView1.DataSource = dr; GridView1.DataBind(); cn.Close(); } </script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" ShowHeader="False"> </asp:GridView> </form></body></html>不过,通过公式计算的单元格在Excel里也没显示出正确的值。 在 excel都看不到值啊。是不是公式是写错了? http://d.namipan.com/d/24185eaeb5b9490d2379e061e54d001b53ebc08d00f22100我把excel放在网上了 ,大家有时间帮我看看吧,如果把最先面两行删除的话,就能够读取其他行的数据,如果带有下面两行,就读不出来。 string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX =1;'"; OleDbConnection excelConnection = new OleDbConnection(conStr); excelConnection.Open(); string strSQL = "SELECT * FROM [Sheet1$]"; //最大値 //string strSQL = "SELECT * FROM [Sheet1$0$5:" + "$" + (colIndex).ToString() + "$" + rowIndex.ToString() + "]"; OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand); DataTable dTable = new DataTable(); dataAdapter.Fill(dTable); 不知道你是说哪些单元格读不出来我拿你那个文件试了下Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\MY\桌面\配分計画 【129 釜山物流センター 30週 2 回】.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"select * from [Sheet1$]结果放在datagridview中,读出来的结果和在excel里看好像是一样的啊,没发现缺少数据,空的地方在Excel里也是空的 可能看不全,图片地址:http://hi.csdn.net/attachment/201008/16/1652785_128193977852RX.jpg http://hi.csdn.net/attachment/201008/16/156168_1281943465HK6I.jpg这是我弄得 ,我在同事电脑上也这样做了 ,结果也是一样 。我的环境xp (sp2)vs2008sql2005(与这个没有关系吧)太郁闷了 帅哥 把你的程序打包发给我吧 email : [email protected]~ ………………你把IMEX =1当中的空格去掉…… C#中new的几种用法 实现select标签的取值和赋值 接口!! 修饰符public对该项无效?? .net 里的string是UNICODE还是ASCII? c# 可選參數? winfrom 中如何将datagrid的数据导成文本文件,再将文本文件数据导回datagrid里!? 命名空间结构的设计(aps.net web 站点高级编程) 怎样在Winform中动态构造一个2维表 如何导出SQL SERVER数据库中的数据到ACCESS中啊? WPF,Grid里的图片为什么始终不靠左边呢? 这个应该怎么做? 麻烦解释下这个正则表达式的意思
读csv跟读excel是一样的道理。要么手动改,要么加空格.
string conStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + "; Extended Properties=\"Excel 8.0;HDR=YES\";";
设置断点发现 ,一个记录中,某些字段是空的 ,挺纳闷的 。
打开EXCEL,遍历查看单元格值
HDR=No;IMEX=1
必须方法2.打开Excel,把每一个单元格的前面加'单引号,
或 直接将excel 转换为csv 格式 逐行读取 这样就不会有丢失了
这些方法都是可行的。
你如果不行,请把你的xls发到[email protected]
# {
# string Connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
# OleDbConnection Conn = new OleDbConnection(Connstr);
# //创建ArrayList对象 存放所有sheetname
# ArrayList sheetNamelist = new ArrayList();
# //获取配置Excel中sheet总数(这里是根据项目需求配置的) 如果需要导入Excel表格所有sheet数据则将此代码删除
# int sheetCount = Convert.ToInt32(ConfigurationManager.AppSettings["sheetCount"].ToString());
# DataSet dsExcel = new DataSet();
# try
# {
# if (Conn.State == ConnectionState.Closed)
# {
# Conn.Open();
# }
# DataTable dtExcelSchema = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
# string sheetName = string.Empty;
# if (dtExcelSchema.Rows.Count > sheetCount)
# {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('很抱歉!你上传Excel文件sheet总数过多不能大于10个sheet..!! ')
# // --></mce:script>");
# return;
# }
# else
# {
# for (int j = 0; j < dtExcelSchema.Rows.Count; j++)
# {
# sheetName = String.Format("Sheet{0}$", j + 1);
# sheetNamelist.Add(sheetName);
# }
# }
#
# }
# catch (Exception ex)
# {
# throw new Exception(ex.Message.ToString(), ex);
# }
# finally
# {
# Conn.Close();
# }
# try
# {
# string strSQL = string.Empty;
# for (int i = 0; i < sheetNamelist.Count; i++)
# {
# strSQL = "select * from [" + sheetNamelist[i].ToString() + "]";
# OleDbDataAdapter da = new OleDbDataAdapter(strSQL, Conn);
# DataTable dtExcel = new DataTable(sheetNamelist[i].ToString());
# da.Fill(dtExcel);
# dsExcel.Tables.Add(dtExcel);
# }
# return dsExcel;
# }
# catch (Exception ex)
# {
# throw new Exception(ex.Message.ToString(), ex);
# }
# }
#
# //从Excel 表中取出数据 将取出来的数据插入到数据库中
# public void InsertData(DataSet ds) {
# string strSQL=string.Empty;
# if (ds.Tables[0].Rows.Count > 0)
# {
# for (int j = 0; j < ds.Tables.Count; j++)
# {
# for(int i=0;i<ds.Tables[j].Rows.Count;i++)
# {
# DataRow dr=ds.Tables[j].Rows[i];
# //组名
# string groupname = dr["组名"].ToString().Trim();
# //联系人
# string contactName = dr["联系人"].ToString().Trim();
# //手机号码
# string mobile = dr["手机号码"].ToString().Trim();
# //公司名称
# string companyName = dr["公司名称"].ToString().Trim();
# //公办号码
# string officeNum = dr["办公号码"].ToString().Trim();
# //家庭号码
# string homeNum = dr["家庭号码"].ToString().Trim();
# //邮箱
# string Email = dr["邮 箱"].ToString().Trim();
# //联系地址
# string address = dr["联系地址"].ToString().Trim();
# //创建时间
# string createtime = dr["创建时间"].ToString().Trim();
# //性别
# string Sex = dr["性别"].ToString().Trim();
# //手机套餐类型
# string mobileType = dr["手机套餐类型"].ToString().Trim();
# //是否开通通信助理
# string isOpen = dr["是否开通通信助理"].ToString().Trim();
# //SQL 语句
# strSQL = "insert into msm_Excel(groupName,Mobile,Name,companyName,officeNum,homeNum,Emial,address,Createtime,Sex,mobileType,isOpen)values('" + groupname + "','" + mobile + "','" + contactName + "','" + companyName + "','" + officeNum + "','" + homeNum + "','" + Email + "','" + address + "','" + createtime + "','" + Sex + "','" + mobileType + "','" + isOpen + "')";
# try
# {
# int n = SQLHelper.SqlDataExecute(strSQL);
# if (n > 0)
# {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('数据插入成功!')
# // --></mce:script>");
# Label1.Text = "一共成功插入" + ds.Tables[j].Rows.Count.ToString() + "条数据";
# }
# else
# {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('服务器繁忙!请稍候再试..!')
# // --></mce:script>");
# }
# }
# catch (Exception ex)
# {
# throw ex;
# }
# }
# }
# }
#
# else {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('此Excel文件中无数据!!!')
# // --></mce:script>");
# }
#
# }
# //调用
# //获取上传文件名
# string fileName = FileUpload1.FileName;
# //判断是否存在上传文件
# if (FileUpload1.PostedFile.FileName.Length == 0) {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('请选择你要上传的Excel文件!!')
# // --></mce:script>");
# }
# //判断上传的文件类型是否正确
# else if (!Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower().Equals(".xls") && !Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower().Equals(".xlsx"))
# {
# Page.RegisterStartupScript("", "<script>alert('很抱歉!你上传的文件类型不正确!只能上传Excel类型的文件!')</script.");
# }
# else
# {
# //获取上传的文件路径
# filePath = Server.MapPath("TxtFiles\\") + DateTime.Now.ToString("yyyyMMddhhmmss") + fileName;
# this.FileUpload1.PostedFile.SaveAs(filePath);
# ds = GetDataSet(filePath);
# InsertData(ds);
#
# }
<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server"> protected void Page_Load(object sender, EventArgs e)
{
String ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Data.xls") + "; Extended Properties=\"Excel 8.0;HDR=No;IMEX=1;\"";
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand("Select * From [Sheet1$C3:FP5785]", cn);
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
GridView1.DataSource = dr;
GridView1.DataBind();
cn.Close();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" ShowHeader="False">
</asp:GridView>
</form>
</body>
</html>
不过,通过公式计算的单元格在Excel里也没显示出正确的值。
我把excel放在网上了 ,大家有时间帮我看看吧,如果把最先面两行删除的话,就能够读取其他行的数据,如果带有下面两行,就读不出来。
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX =1;'";
OleDbConnection excelConnection = new OleDbConnection(conStr);
excelConnection.Open();
string strSQL = "SELECT * FROM [Sheet1$]"; //最大値
//string strSQL = "SELECT * FROM [Sheet1$0$5:" + "$" + (colIndex).ToString() + "$" + rowIndex.ToString() + "]";
OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand); DataTable dTable = new DataTable();
dataAdapter.Fill(dTable);
我拿你那个文件试了下Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\MY\桌面\配分計画 【129 釜山物流センター 30週 2 回】.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"select * from [Sheet1$]结果放在datagridview中,读出来的结果和在excel里看好像是一样的啊,没发现缺少数据,空的地方在Excel里也是空的
http://hi.csdn.net/attachment/201008/16/1652785_128193977852RX.jpg
这是我弄得 ,我在同事电脑上也这样做了 ,结果也是一样 。
我的环境
xp (sp2)
vs2008
sql2005(与这个没有关系吧)
太郁闷了
~
你把IMEX =1当中的空格去掉……