【发布时间】:2016-03-09 11:09:21
【问题描述】:
我正在使用 EPPlus 将数据从 excel 读取到 datable。
在读取了 10 行记录的 excel 表后,我通过删除现有数据来修改 excel 表并仅保留一行数据。 但是当我读取修改后的 excel 时,它仍然会读取 10 行(1 行有值,其余为空字段)到数据表。
如何限制这一点? 我正在使用以下代码来阅读 Excel。
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(FilePath))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
bool hasHeader = true; // adjust it accordingly(this is a simple approach)
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
DSClientTransmittal.Tables[0].Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
//var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
var wsRow = ws.Cells[rowNum, 1, rowNum, DSClientTransmittal.Tables[0].Columns.Count];
var row = DSClientTransmittal.Tables[0].NewRow();
foreach (var cell in wsRow)
{
try
{
object cellValue = cell.Value;
//row[cell.Start.Column - 1] = cell.Text;
row[cell.Start.Column - 1] = cellValue.ToString().Trim();
//cell.Style.Numberformat.Format = "@";
//row[cell.Start.Column - 1] = cell.Text;
}
catch (Exception ex) { }
}
DSClientTransmittal.Tables[0].Rows.Add(row);
}
pck.Dispose();
}
当我使用 Interop excel 读取 excel 时,同样的问题被克服了
clearformat()类似方法
ws.Columns.ClearFormats();
xlColCount = ws.UsedRange.Columns.Count;
在 Epplus open xml 中是否有任何等价物? 如何获得修改后的 Excel 的实际使用范围?
【问题讨论】:
-
你是如何删除数据的?
-
Dimension 在我的所有测试中似乎都返回了正确的范围。即使在删除行并重新导入之后。删除后你的情况是Dimension指示10行吗?
-
@PhilipBijker,@Ernie:我选择了所有需要删除并按下删除键的单元格,而不是整行
-
尝试删除整行,这应该会导致正确的维度
-
如果任何列包含数据,或者上面或下面的任何行包含数据,则行包含在维度中。如果这是您的情况,恐怕为这些空行编写自定义逻辑是您唯一的选择。
标签: c# excel openxml epplus excel-import