2012-03-19 3 views
2

몇 가지 솔루션을 찾고 있었지만 찾지 못했습니다. 현재 OpenXML을 사용하여 Excel 파일을 읽는 데 문제가 있습니다. 완벽한 데이터를 사용하면 문제는 발생하지 않지만 공백이있는 데이터의 경우 열이 왼쪽으로 이동하여 실제 왼쪽으로 이동 한 이후 색인이 올바르지 않다고 말하는 오류가 발생합니다. 나는 당신이 사이에 셀에 배치 할 수있는 솔루션을 발견했지만 내가 그것을 시도, 개체 참조가 개체의 인스턴스에이 코드를 사용하여 특정 셀을 읽는 동안 설정되지 않았다는 오류가 발생했습니다 (소스는 여기서 셀 How do I have Open XML spreadsheet "uncollapse" cells in a spreadsheet?)OpenXML을 사용하여 Excel 파일의 빈 공간을 읽는 방법

public static string GetCellValue(SpreadsheetDocument document, Cell cell) 
{ 
    SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart; 
    string value = cell.CellValue.InnerXml; 

    if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString) 
    { 
     return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText; 
    } 
    else if (cell == null) 
    { 
     return null; 
    } 
    else 
    { 
     return value; 
    } 
} 

I 좌측에 데이터를 이동하지 않고 빈 공백 셀을 판독 할 수있는 것을 특징으로하는 다른 방법을 삽입?

모든 도움을 주실 수 있습니다! :)

고마워요!

답변

3

Open XML에서 xml 파일에는 빈 셀을 건너 뛰는 빈 셀에 대한 항목이 없습니다. 나는 똑같은 문제에 직면했다. 유일한 해결책은 일부 논리를 적용하는 것입니다. 예

:

우리는 다음 코드

string cellIndex = GetColumnName(objCurrentSrcCell.CellReference); 

public static string GetColumnName(string cellReference) 
     { 
      // Create a regular expression to match the column name portion of the cell name. 
      Regex regex = new Regex("[A-Za-z]+"); 
      Match match = regex.Match(cellReference); 
      return match.Value; 
     } 
의해 우리가 얻을 수있는 세포 자사의 ColumnName (A, B, C 등)를 읽을 때

이러한 셀을 Hashtable에 저장할 수 있습니다. 여기서 키는 셀 ColumnName이고 값은 obje가 될 수 있습니다 ct. 그리고

당신은 Z A에서 루프 이것은

if(objHashTable.Contains(yourKey)) 
{ 
    Cell objCell = (Cell) objHashTable[yourKey]; 
    //Insertcell or process cell 
} 
else 
{ 
    //do process for the empty cell like you may add a new blank cell 
    Cell objCell = new Cell(); 
    //Insert cell or process cell 
} 

처럼 특정 키에서 세포를 읽을 수 있습니다 ... 직렬 어떤 기준이나 논리 등에 해시 객체로부터 세포를 가져 작성할 때 open xml로 작업하는 유일한 방법. 독서 중에 빈 전지를 추가하는 것은 시간 낭비입니다. 당신이 더 많은 로직을 추가 할 수 있습니다
이것을 시도하십시오. 이것은 확실히 작동 할 것입니다. 또는 더 나은 해결책을 찾으면 좋은 하루 보내십시오 :)

관련 문제