Eplus를 사용하여 수정된 엑셀의 실제 사용 범위를 어떻게 얻을 수 있습니까?
저는 EPLUS를 사용하여 엑셀에서 데이타블까지 데이터를 읽고 있습니다.
10줄의 레코드가 있는 엑셀 시트를 읽은 후 기존 데이터를 삭제하여 엑셀 시트를 수정하고 1줄의 데이터만 보관하였습니다.그러나 수정된 Excel을 읽을 때 데이터 테이블에 10개의 행(1개의 값이 있고 null 필드로 남아 있음)을 계속 읽습니다.
어떻게 이것을 제한할 수 있습니까?저는 엑셀을 읽기 위해 아래의 코드를 사용하고 있습니다.
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();
}
제가 엑셀을 읽기 위해 인터op 엑셀을 사용했을 때, 같은 문제가 해결되었습니다.clearformat()
같은 방법
ws.Columns.ClearFormats();
xlColCount = ws.UsedRange.Columns.Count;
Eplus open xml에 이와 동등한 것이 있습니까?수정된 엑셀의 실제 사용 범위를 어떻게 얻을 수 있습니까?
일부 셀의 데이터만 삭제할 때 행을 고려하지 않아야 함을 나타내는 기본 제공 방식은 없습니다.
Dimension
가능한 한 가깝지만 행이 포함되어 있습니다.Dimension
열에 데이터가 포함되어 있거나 위 또는 아래 행에 데이터가 포함되어 있는 경우.
그러나 for 루프에서 행을 건너뛰어야 하는지 확인할 수 있습니다.예를 들어, 항상 처음 4개 열의 데이터만 삭제하는 경우 다음을 시도할 수 있습니다.
if(!ws.Cells[rowNum, 1, rowNum, 4].All(c => c.Value == null))
{
//Continue adding the row to the table
}
설명에 행을 건너뛰는 기준이 표시되어 있지 않지만, 이해할 수 있습니다.
우선, 저는 C# 프로그래머는 아니지만 Excel VBA 스크립트를 사용하여 작동하는 솔루션을 가지고 있다고 생각합니다.이 Excel VBA 코드를 C로 실행하거나 C+로 동일한 작업을 수행하는 방법에 대한 통찰력을 얻을 수 있습니다.
문제는 Excel이 워크시트의 작업 크기를 처리하는 방식과 관련이 있습니다.백만 번째 행에 데이터를 입력한 다음 해당 셀을 삭제해도 Excel은 워크시트에 백만 개의 행이 있는 것으로 계속 표시됩니다.
이 Excel VBA 코드를 테스트해 보니 완전히 비어 있는 모든 행이 삭제되고 워크시트 크기가 재설정되었습니다.
Sub DelEmptyRowsResizeWorksheet()
Dim i As Long, iLimit As Long
iLimit = ActiveSheet.UsedRange.Rows.Count
For i = iLimit To 1 Step -1
If Application.CountA(Cells(i, 1).EntireRow) = 0 Then
Cells(i, 1).EntireRow.Delete
End If
Next i
iLimit = ActiveSheet.UsedRange.Rows.Count ' resize the worksheet based on the last row with data
End Sub
스크립트 없이 수동으로 이 작업을 수행하려면 먼저 워크시트의 맨 아래(또는 오른쪽 열)에 있는 빈 행을 모두 삭제하고 저장한 다음 워크북을 닫았다가 다시 엽니다.이렇게 하면 Excel 워크북 크기도 재설정됩니다.
언급URL : https://stackoverflow.com/questions/34089677/how-can-i-get-actual-used-range-for-modified-excels-using-epplus
'programing' 카테고리의 다른 글
Spring 및 SLF4J를 구성하여 로깅을 가져오려면 어떻게 해야 합니까? (0) | 2023.08.24 |
---|---|
관계 컬렉션을 라벨로 다시 로드하려면 어떻게 해야 합니까? (0) | 2023.08.24 |
Excel 2007에서 열의 모든 값을 텍스트로 처리 (0) | 2023.08.24 |
그래들을 사용하여 APK 파일 이름에서 versionName을 설정하는 방법은 무엇입니까? (0) | 2023.08.24 |
단일 분기 클론을 "실행 취소"하려면 어떻게 해야 합니까? (0) | 2023.08.24 |