当前位置: 首页 > 工具软件 > EPPlus > 使用案例 >

C# epplus 获得当前excel的有效行

阴波峻
2023-12-01

C# epplus 获得当前excel的有效行

当我想要在获得已经导出的excel,接着下面再进行导入时,我发现一个问题,就是如果我使用的时Dgv转 DataTable,然后直接使用DataTable导出时,就会导致重新加载的时候,所获得Dimension的数值非常的大。就无法获得真正所使用过了的行数。
我一开始以为是这个方法所获得得并不是我所理解得含义,所有就在网上一直找可以获得excel已使用得行数得代码。但是找了一圈都无法解决这个问题。然后就是我偶然间,发现,我所使用得直接通过value赋值得方式来输出得excel,是可以正确获得已使用得行数得。
由此,我就判断是datatable直接导出得原因,导致我无法获得正确得已使用得行数了。所以就是将

	FileInfo newFile = new FileInfo(@filepath);
	using (ExcelPackage package = new ExcelPackage(newFile))
	{
		ExcelWorksheet worksheet;
		if (package.Workbook.Worksheets.Count > 0)
        {
            worksheet = package.Workbook.Worksheets.FirstOrDefault();
        }
        else
        {
            worksheet = package.Workbook.Worksheets.Add("test");
        }
		//获得当前已使用的维度
		int currindex = worksheet.Dimension.End.Row;
	}
	ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");//创建worksheet
	worksheet.Cells[1, 1].Value = "名称";//直接指定行列数进行赋值
	worksheet.Cells["A1"].Value = "名称";//直接指定单元格进行赋值

因此我推断,如果获得的数是一个很大的数,那么就是excel被“污染”了,我的处理方式是需要重新选择一个新的路径来完成;
直接使用dgv转datatable导出的excel,就会有这种问题。
所以建议如果要导出数据的话,并且有需要再次往excel里面进行写入数据的话,就需要通过自己的写数据的方式来进行,直接使用datatable可能会导致污染excel文件。我所使用的datatable是从dgv转到datatable,代码也是从网上copy的,可能也许是我生成的datatable不够规范也有可能。

        private static DataTable GetDgvToTable(DataGridView dgv)
        {
            DataTable dt = new DataTable();
            dt.TableName = "测量数据";
            // 列强制转换
            for (int count = 0; count < dgv.Columns.Count; count++)
            {
                System.Data.DataColumn dc = new System.Data.DataColumn(dgv.Columns[count].Name.ToString());
                dt.Columns.Add(dc);
            }
            // 循环行
            for (int count = 0; count < dgv.Rows.Count; count++)
            {
                DataRow dr = dt.NewRow();
                for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
                {
                    dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }

总而言之。就是这样,因为我看epplus的官方程序,所使用的都是先将excel文件进行清理掉后再进行写入的。就和我的需求不太一样,然后就是这样,希望能够帮到大家解决一点小困惑。

 类似资料: