epplus - EPPlus - 如何仅复制带有数据的单元格?
问题描述
如何读取 excel 文件并仅选择那些具有数据的单元格 - 没有格式,没有空格,只有文本或数字。
使用 EPPlus?
我知道我可以像这样阅读电子表格:如何仅对这些单元格进行“选择”并制作副本。
(但是但是这些值是错误的!! int rowCount = excelRange.Rows.Count; int colCount = excelRange.Columns.Count;)
Excel.Application excelApp = new Excel.Application();
if (excelApp != null)
{
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\test.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[1];
Excel.Range excelRange = excelWorksheet.UsedRange;
int rowCount = excelRange.Rows.Count;
int colCount = excelRange.Columns.Count;
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
Excel.Range range = (excelWorksheet.Cells[i, 1] as Excel.Range);
string cellValue = range.Value.ToString();
//do anything
}
}
excelWorkbook.Close();
excelApp.Quit();
解决方案
您可以利用Worksheet.Cells
集合仅包含具有“内容”的单元格的条目这一事实,即值、样式等。因此,如果您有这样的工作表:
并做了这样的事情:
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.First();
var valueCells = worksheet
.Cells
.Where(c => c.Value != null) //This will filter out the Yellow empty cells
.ToList();
valueCells.ForEach(c => Console.WriteLine($"{c.Start.Row},{c.Start.Column} = {c.Value}"));
}
会在输出中给你这个:
1,1 = Col1
1,2 = Col2
1,3 = Col3
2,1 = 0
2,3 = thcu5qox.0ni
3,2 = 10
4,1 = 2
4,2 = 20
5,1 = 3
5,2 = 30
5,3 = 4gnyrwlr.twk
6,1 = 4
6,2 = 40
7,2 = 50
7,3 = nswaeft2.y1h
8,1 = 6
9,2 = 70
10,2 = 80
10,3 = qmz4tkd3.qcw
11,1 = 9
11,2 = 90
11,3 = zjahlstc.azr
推荐阅读
- php - 提高性能:反转 3 个字符,然后删除第 4 个字符,重复直到一个大字符串的结尾
- reactjs - 如何将 jest 的 .toHaveBeenCalledWith() 与匹配器一起使用
- spring - 使用 Junit 在 Eclipse 中运行时测试用例通过,但使用 mvn install 失败
- html - 我将如何在 CSS 中实现这种外观?
- terraform - 如何替换 Terraform 创建的实例
- sas - 在 SAS 中第一次指示变量从 1 更改为 0 后保持具有相同唯一 ID 的数据行
- google-pay - 不要在 Google Pay 中点击付款进行收费
- deep-learning - 在 VGG 模型上用平均池化层替换最大池化层
- javascript - 为什么组件没有道具?
- python - 我的 Django urls.py 代码有什么问题吗?