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行是没值的,无法理解,怎么改啊,求大神!谢谢!

参考技术A 以下的方法是用NPOI实现Excel表格读取数据到DataTable的功能的代码
/// <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肯定错误的啦....

本回答被提问者采纳
参考技术B 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();

你试试把rowNum写在前面:
for (int i = 0; i < rowNum; i++)

//....
for (int j = 0; j < colNum; j++)

//...

以上是关于C#从excel表导入到datagridview 找不到可安装的 ISAM的主要内容,如果未能解决你的问题,请参考以下文章

C# 将excel导入到DataGridView上 (可以对数据进行操作)

C# Excel加载到datagridview显示

c#中,excel表格内容展现在datagridview1中,如何实现?

C# excel文件导入导出

Excel导入导出DataGridView

winfrom_导入Excel文件加载数据到datagridview并将数据保存到数据库