C#从Excel中读取数据为空了,该怎么解决啊?
C#从Excel中读取数据为空了,该怎么解决啊?是用stringstrConn="Provider=Microsoft.Jet.Oledb.4.0;DataSource=...
C#从Excel中读取数据为空了,该怎么解决啊?
是用 string strConn = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + strPath
+ "; Extended Properties=‘Excel 8.0; HDR=NO; IMEX=1;’";
这样的连接读取数据的,可是我有的列前100行是数字,而之后是字符,这些字符没有读取出来,全是空,我不想修改注册表,不用office控件,该怎么解决呢? 展开
是用 string strConn = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + strPath
+ "; Extended Properties=‘Excel 8.0; HDR=NO; IMEX=1;’";
这样的连接读取数据的,可是我有的列前100行是数字,而之后是字符,这些字符没有读取出来,全是空,我不想修改注册表,不用office控件,该怎么解决呢? 展开
5个回答
展开全部
1用OleBb读取Excel的时候,如果没有配置IMEX=1的属性,微软的处理机制是将列转换为同一类型来读取的.例如你在第一行写的数字格式,而第二行写的字符格式,就会出现某些列有值却读不出来.其实问题也很简单,如果知道问题所在的话.属性设置为"IMEX=1"即可。
读取excel数据 到 datagrid 出现:找不到可安装的ISAM 错误:
2.实在没有办法了 就仔细的查看了
一下数据链接字符串:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" + Server.MapPath(strExcelPath) + ";Extended Properties=Excel
8.0;HDR=Yes;IMEX=1;";最后发现“单引号”漏了。
改为:
String sConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strExcelPath) +
";Extended Properties='Excel
8.0;HDR=Yes;IMEX=1;'"; 就ok了。
读取excel数据 到 datagrid 出现:找不到可安装的ISAM 错误:
2.实在没有办法了 就仔细的查看了
一下数据链接字符串:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" + Server.MapPath(strExcelPath) + ";Extended Properties=Excel
8.0;HDR=Yes;IMEX=1;";最后发现“单引号”漏了。
改为:
String sConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strExcelPath) +
";Extended Properties='Excel
8.0;HDR=Yes;IMEX=1;'"; 就ok了。
展开全部
/// <summary>
/// 读取Excel文件,将内容存储在DataSet中
/// </summary>
/// <param name="opnFileName">带路径的Excel文件名</param>
/// <returns>DataSet</returns>
private DataSet ExcelToDataSet(string opnFileName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = new DataSet();
try
{
strExcel = "select * from [sheet1$]";
conn.Open();
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, "dtSource");
conn.Close();
}
catch
{
MessageBox.Show("源数据出错!");
DataSet d = new DataSet();
return d;
}
return ds;
}
注意:该方法有似乎只支持97-2003格式的excl,还有就是读取不了第一行,这个问题我找过很多地方,都没有找打答案,我的解决方案就是,表头写两行,因为他不读取第一行数据。另外,尽量不要有空格,容易吧空格后面的内容读掉
/// 读取Excel文件,将内容存储在DataSet中
/// </summary>
/// <param name="opnFileName">带路径的Excel文件名</param>
/// <returns>DataSet</returns>
private DataSet ExcelToDataSet(string opnFileName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = new DataSet();
try
{
strExcel = "select * from [sheet1$]";
conn.Open();
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, "dtSource");
conn.Close();
}
catch
{
MessageBox.Show("源数据出错!");
DataSet d = new DataSet();
return d;
}
return ds;
}
注意:该方法有似乎只支持97-2003格式的excl,还有就是读取不了第一行,这个问题我找过很多地方,都没有找打答案,我的解决方案就是,表头写两行,因为他不读取第一行数据。另外,尽量不要有空格,容易吧空格后面的内容读掉
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public partial class ExeporteExcel : Form
{
public ExeporteExcel()
{
InitializeComponent();
}
SqlDataAdapter adapter;
DataSet set;
private void button1_Click(object sender, EventArgs e)
{
ExportDataGridview(dataGridView1, true);
}
private void ExeporteExcel_Load(object sender, EventArgs e)
{
SqlConnection aa = new SqlConnection("Data Source=WIN-V29OC4E9DR6;Initial Catalog=mysql;Integrated Security=True");
aa.Open();
adapter = new SqlDataAdapter("select * from course",aa);
set = new DataSet();
adapter.Fill(set);
dataGridView1.DataSource=set.Tables[0];
}
public bool ExportDataGridview(DataGridView dgv, bool isShowExcle)
{
if (dgv.Rows.Count == 0)
return false;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Application.Workbooks.Add(true);
excel.Visible = isShowExcle;
for (int i = 0; i < dgv.ColumnCount; i = i + 1)
{
excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
}
for (int i = 0; i < dgv.RowCount - 1; i = i + 1)
{
for (int j = 0; j < dgv.ColumnCount; j = j + 1)
{
if (dgv[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "" + dgv[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
}
}
}
return true;
}
}
{
public ExeporteExcel()
{
InitializeComponent();
}
SqlDataAdapter adapter;
DataSet set;
private void button1_Click(object sender, EventArgs e)
{
ExportDataGridview(dataGridView1, true);
}
private void ExeporteExcel_Load(object sender, EventArgs e)
{
SqlConnection aa = new SqlConnection("Data Source=WIN-V29OC4E9DR6;Initial Catalog=mysql;Integrated Security=True");
aa.Open();
adapter = new SqlDataAdapter("select * from course",aa);
set = new DataSet();
adapter.Fill(set);
dataGridView1.DataSource=set.Tables[0];
}
public bool ExportDataGridview(DataGridView dgv, bool isShowExcle)
{
if (dgv.Rows.Count == 0)
return false;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Application.Workbooks.Add(true);
excel.Visible = isShowExcle;
for (int i = 0; i < dgv.ColumnCount; i = i + 1)
{
excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
}
for (int i = 0; i < dgv.RowCount - 1; i = i + 1)
{
for (int j = 0; j < dgv.ColumnCount; j = j + 1)
{
if (dgv[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "" + dgv[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
}
}
}
return true;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试把EXCEL 储存为.csv的格式 就是都用逗号分隔的那种试试
我刚成为C#程序员不久 我还不高端 哈哈
我刚成为C#程序员不久 我还不高端 哈哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我去问老师
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询