C# Excel加载到datagridview显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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显示的主要内容,如果未能解决你的问题,请参考以下文章
C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
求C#高手,Excel中单元格显示的是日期格式,当我读取到DataGridView中时,就变成了文本格式了
winfrom_导入Excel文件加载数据到datagridview并将数据保存到数据库