MS Excel 시트에는 하나의 행렬 데이터가 채워져 있습니다.데이터가있는 셀 범위 만 가져옵니다.
어떻게 숫자 영역 만 가져올 수 있습니까?
지금 데이터 범위는 workSheet.UsedRange
입니다. 그러나 하나의 행렬을 삭제하면 행이 삭제 되었더라도 useRange에서 고려됩니다! 그것은 이전에 그 세포들을 사용했기 때문입니다.
그래서 은 실제 사물 (숫자)이있는 범위 만에 어떻게 얻을 수 있습니까?
코드 :
public Array ReadData(string fullPath, Size size)
{
Excel.Application application;
Workbook workBook;
Worksheet workSheet;
Range range;
application = new Excel.ApplicationClass();
workBook = application.Workbooks.Open(fullPath, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
workSheet = (Worksheet)workBook.Worksheets.get_Item(1);
//HERE IS THE PROBLEM
range = workSheet.UsedRange;
if (!size.IsEmpty)
{
Size availableSize = new Size(range.Columns.Count, range.Rows.Count);
if ((availableSize.Width < size.Width) || (availableSize.Height < size.Height))
{
string msg = string.Format("Available data range ({0}) at the sheet is smaller than needed size ({1})", availableSize, size);
throw new ArgumentException(msg);
}
else if ((availableSize.Width > size.Width) || (availableSize.Height > size.Height))
{
range = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[size.Width, size.Height]);
string msg = string.Format("Available data range ({0}) at the sheet is bigger than needed size ({1})", availableSize, size);
Trace.TraceInformation(msg);
}
}
Array data;
data = (Array)range.Cells.Value2;
return data;
}
가능한 솔루션은 내가 생각하는 VB에서 포스트했다. C#에서이 될 것입니다 :
range = workSheet.UsedRange;
range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers);
하지만이 excpetion을 제기
이
명확하게하려면 :이'data = (Array) range.Cells.Value2; '의 결과는 무엇입니까? 삭제 된 행 (빈 문자열 또는 smth)도 포함됩니까? –
셀을 편집하고 항목을 삭제하면 작업이 진행 중입니다. 더 이상 범위를 변경하지 않습니다. 어쩌면 2010 년을 능가 할 것입니다. – Pedro77