C#从excel表导入到datagridview 找不到可安装的 ISAM
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#从excel表导入到datagridview 找不到可安装的 ISAM相关的知识,希望对你有一定的参考价值。
private void button1_Click(object sender, EventArgs e)
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Filter = "Microsoft Excel files (*.xls)|*.xls";//指定打开文件的内型
string fileName;
string connectionString;
if (fileDialog.ShowDialog() == DialogResult.OK)
fileName = fileDialog.FileName;
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;'";
OleDbConnection con = new OleDbConnection(connectionString);//连接到指定的Excel文件
con.Open();
string strSQL = "SELECT * FROM [Sheet1$]";
OleDbCommand command = new OleDbCommand(strSQL, con);
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
DataTable table = new DataTable();
adapter.Fill(table);
dataGridView1.DataSource = table;
con.Close();
adapter.Dispose();
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";extended properties='Excel 8.0;HDR=NO;IMEX=1;'";
我的excel也是12.0,但要改成8.0,还有要加上后面的两个才行。不知为啥?仅供参考。 参考技术A 我的office也是12.0就是excel2010版的,你试一下这样写,就OK了
string strOdbcCon = @"Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" + filepath + ";" + "Extended Properties=Excel 12.0;"; 参考技术B 你的excel的版本是多少?
参考资料:hi.baidu.com\lcl_data
C# Excel加载到datagridview显示
。。。。。
int rowNum = ws.UsedRange.Cells.Rows.Count;//获得要导入显示excel文件的行数
int colNum = ws.UsedRange.Cells.Columns.Count;获得要导入显示excel文件的列数数
string cellStr = null;
char ch = 'A';
//动态添加行列并填充值
for (int i = 0; i < colNum; i++)
dataGridView1.Columns.Add(i.ToString(), ch.ToString());
dataGridView1.Rows.Add(rowNum);
for (int j = 0; j < rowNum; j++)
cellStr = ch.ToString() + (j + 1).ToString();
dataGridView1[i, j].Value = ws.UsedRange.Cells.get_Range(cellStr, miss).Text.ToString();
ch++;
结果是:假如excel文件件行数有20行,列数有5列,能成功加载显示,但是datagridview却实际有20*5=100行,其他80行是没值的,无法理解,怎么改啊,求大神!谢谢!
/// <summary>
/// 读取Excel[.xls](返回DataTable)
/// </summary>
/// <param name="path">Excel路径</param>
/// <returns></returns>
public static DataTable ReadExcel(string path)
try
DataTable dt = new DataTable();
using (FileStream fs = new FileStream(path, FileMode.Open))
IWorkbook workbook = new HSSFWorkbook(fs);
ISheet sheet = workbook.GetSheetAt(0);
int rfirst = sheet.FirstRowNum;
int rlast = sheet.LastRowNum;
IRow row = sheet.GetRow(rfirst);
int cfirst = row.FirstCellNum;
int clast = row.LastCellNum;
for (int i = cfirst; i < clast; i++)
if (row.GetCell(i) != null)
dt.Columns.Add(row.GetCell(i).StringCellValue, System.Type.GetType("System.String"));
row = null;
for (int i = rfirst + 1; i <= rlast; i++)
DataRow r = dt.NewRow();
IRow ir = sheet.GetRow(i);
for (int j = cfirst; j < clast; j++)
if (ir.GetCell(j) != null)
r[j] = ir.GetCell(j).ToString();
dt.Rows.Add(r);
ir = null;
r = null;
sheet = null;
workbook = null;
return dt;
catch
System.Windows.Forms.MessageBox.Show("Excel格式错误或者Excel正由另一进程在访问");
return null;
至于你的问题,两个原因:
一是你的程序有问题。
二是你的Excel有问题,实际你的Excel确实是20*5行,只是后面行是空的,所以你显示出来出现100的问题。追问
原因1是绝对的,原因2不可能,因为试了好几个xls显示到datagridview都是:行*列
我想得到的答案是纠正我代码的错误处,谢谢
大致帮你把代码看了遍,感觉你的代码逻辑完全不对啊....你对列进行循环却进行了AddRow???这个逻辑上肯定是错的....
这样做啊,你先 for(列) 把所以列全部添加完,然后进行 for(行) 进行AddRow,这样逻辑上就不会乱了.....像你那样For(列)却AddRow肯定错误的啦....
dataGridView1.Columns.Add(i.ToString(), ch.ToString());
dataGridView1.Rows.Add(rowNum);
for (int j = 0; j < rowNum; j++)
cellStr = ch.ToString() + (j + 1).ToString();
dataGridView1[i, j].Value = ws.UsedRange.Cells.get_Range(cellStr, miss).Text.ToString();
你试试把rowNum写在前面:
for (int i = 0; i < rowNum; i++)
//....
for (int j = 0; j < colNum; j++)
//...
以上是关于C#从excel表导入到datagridview 找不到可安装的 ISAM的主要内容,如果未能解决你的问题,请参考以下文章
C# 将excel导入到DataGridView上 (可以对数据进行操作)