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

参考技术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显示的主要内容,如果未能解决你的问题,请参考以下文章

C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

求C#高手,Excel中单元格显示的是日期格式,当我读取到DataGridView中时,就变成了文本格式了

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

C# excel文件导入导出

c# winform datagridview首次加载默认显示的问题

C#如何读写EXcel然后在dataGridView1中显示