OpenXML 형식 SDK를 사용하여 스프레드시트에서 데이터를 읽는 방법은 무엇입니까?
Open XML SDK 2.0을 사용하여 Excel 2007 워크북의 단일 워크시트에서 데이터를 읽어야 합니다.이 작업에 대한 기본 지침을 검색하는 데 많은 시간을 할애했지만 스프레드시트 작성에 대한 도움말만 발견했습니다.
이 SDK를 사용하여 워크시트에서 행을 반복한 다음 각 행의 셀을 반복하는 방법은 무엇입니까?
다른 대답은 메타답변에 가까웠습니다.LINQ를 사용하면 문서 부품이 분리되어 작동하기 때문에 어려움을 겪고 있습니다.다음 코드에는 가능한 문자열 검색을 해결하는 Cell에서 값을 가져오는 래퍼 함수가 포함되어 있습니다.
public void ExcelDocTest()
{
Debug.WriteLine("Running through sheet.");
int rowsComplete = 0;
using (SpreadsheetDocument spreadsheetDocument =
SpreadsheetDocument.Open(@"path\to\Spreadsheet.xlsx", false))
{
WorkbookPart workBookPart = spreadsheetDocument.WorkbookPart;
foreach (Sheet s in workBookPart.Workbook.Descendants<Sheet>())
{
WorksheetPart wsPart = workBookPart.GetPartById(s.Id) as WorksheetPart;
Debug.WriteLine("Worksheet {1}:{2} - id({0}) {3}", s.Id, s.SheetId, s.Name,
wsPart == null ? "NOT FOUND!" : "found.");
if (wsPart == null)
{
continue;
}
Row[] rows = wsPart.Worksheet.Descendants<Row>().ToArray();
//assumes the first row contains column names
foreach (Row row in wsPart.Worksheet.Descendants<Row>())
{
rowsComplete++;
bool emptyRow = true;
List<object> rowData = new List<object>();
string value;
foreach (Cell c in row.Elements<Cell>())
{
value = GetCellValue(c);
emptyRow = emptyRow && string.IsNullOrWhiteSpace(value);
rowData.Add(value);
}
Debug.WriteLine("Row {0}: {1}", row,
emptyRow ? "EMPTY!" : string.Join(", ", rowData));
}
}
}
Debug.WriteLine("Done, processed {0} rows.", rowsComplete);
}
public static string GetCellValue(Cell cell)
{
if (cell == null)
return null;
if (cell.DataType == null)
return cell.InnerText;
string value = cell.InnerText;
switch (cell.DataType.Value)
{
case CellValues.SharedString:
// For shared strings, look up the value in the shared strings table.
// Get worksheet from cell
OpenXmlElement parent = cell.Parent;
while (parent.Parent != null && parent.Parent != parent
&& string.Compare(parent.LocalName, "worksheet", true) != 0)
{
parent = parent.Parent;
}
if (string.Compare(parent.LocalName, "worksheet", true) != 0)
{
throw new Exception("Unable to find parent worksheet.");
}
Worksheet ws = parent as Worksheet;
SpreadsheetDocument ssDoc = ws.WorksheetPart.OpenXmlPackage as SpreadsheetDocument;
SharedStringTablePart sstPart = ssDoc.WorkbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
// lookup value in shared string table
if (sstPart != null && sstPart.SharedStringTable != null)
{
value = sstPart.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
}
break;
//this case within a case is copied from msdn.
case CellValues.Boolean:
switch (value)
{
case "0":
value = "FALSE";
break;
default:
value = "TRUE";
break;
}
break;
}
return value;
}
편집: GetCellValue()에 대한 수정에 대해 @Nitin-Jadhav에게 감사드립니다.
제가 하는 방법은 린크입니다.SDK를 사용하는 것부터 순수한 Open XML(SDK 없음)을 사용하는 것까지 이 주제에 대한 많은 샘플이 있습니다.다음을 살펴보십시오.
- Office Open XML Formats: Excel 2007 Cell Values 검색(SDK가 아닌 순수 OpenXML을 사용하지만 개념은 매우 유사함)
- Excel 2007에서 LINQ를 사용하여 테이블 쿼리(Open XML SDK 사용, ListObject 가정)
- 스프레드시트 ML에서 데이터 읽기(아마도 "전반적인 소개" 기사가 가장 좋을 것입니다.
언급URL : https://stackoverflow.com/questions/2624333/how-do-i-read-data-from-a-spreadsheet-using-the-openxml-format-sdk
'programing' 카테고리의 다른 글
VBA/Excel에서 Google Chrome 열기 (0) | 2023.06.09 |
---|---|
Python pep-8이 들여쓰기를 위해 탭 위에 공백을 두는 것을 강력히 권장하는 이유는 무엇입니까? (0) | 2023.06.09 |
Xcode에서 LLDB로 디버깅하는 동안 변수 값을 변경하는 방법은 무엇입니까? (0) | 2023.06.04 |
새 GUI를 만들 때 WPF가 Windows Forms보다 선호됩니까? (0) | 2023.06.04 |
Android에서 TextView 스크롤 가능하게 만들기 (0) | 2023.06.04 |