OpenXML을 사용하여 스프레드 시트를 열고 스프레드 시트의 행을 반복합니다. 행 내의 모든 셀을 반환하는 linq 쿼리가 있습니다. linq 쿼리는 MSDN의 데모에서 곧바로 리핑되었습니다.OpenXML linq query
IEnumerable<String> textValues =
from cell in row.Descendants<Cell>()
where cell.CellValue != null
select (cell.DataType != null
&& cell.DataType.HasValue
&& cell.DataType == CellValues.SharedString
? sharedString.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText
: cell.CellValue.InnerText);
LINQ 쿼리는 값, 이 모든 셀을 반환에 큰이지만 값이없는 세포를 반환하지 않습니다. 이것은 차례로 어느 셀이 어떤 것인지 알 수 없게 만듭니다. 좀 더 설명해 드리겠습니다. 예를 들어 스프레드 시트에 이름, SSN 및 주소라는 세 개의 열이 있다고 가정 해보십시오. 이 linq 쿼리가 작동하는 방식은 주어진 행에 대한 값을 가진 셀만 반환한다는 것입니다. 그래서 "John", "", "173 Sycamore"가있는 데이터 행이 있다면 linq 쿼리는 "John"과 "173 Sycamore"를 열거 형으로 반환하므로 열거 형에서 if "173 Sycamore"는 SSN 또는 주소 필드입니다.
여기 다시 말씀 드리겠습니다. 내가 필요한 것은 모든 셀이 반환되고 값이 인 셀뿐 아니라 반환해야합니다.
내가 생각할 수있는 모든면에서 원숭이에게 linq 쿼리를 시도했지만 아무런 운이 없었습니다 (즉, where 절을 제거하는 것이 트릭이 아닙니다). 어떤 도움을 주시면 감사하겠습니다. 감사!
나는 Excel 스프레드 시트를 내보내는 데 ClosedXML을 사용했지만 전혀 가져 오지 않았다고 생각했습니다. 그거야? 나는 심지어 오늘 빠른 그들의 웹 사이트에서 오늘 빠르게 보였다. 그리고 그것이했다라고하는 것을 알지 않았다 (그것은 정말로 빠른 모양이었다). EPPlus를 살펴 보겠습니다. 실제로, OpenXML로 무엇인가를하려고 할 때마다 나는 겉으로는 단순해야만하는 것이 무엇이든 끝내야한다는 것에 놀라곤합니다! – Jagd
가져 오기를 통해 데이터를 읽고 쓰는 기능을 의미하는 경우 OpenXML과 EPPlus가 모두이를 수행 할 수 있습니다. OpenXML을 직접적으로 사용하려고 시도하는 것은 위대한 고통이지만 SDK의 일부인 문서 탐색기와 위 도구와 같은 도구를 사용하면 이전 COM Interop보다 훨씬 좋은 soooooo를 처리해야한다는 데 동의합니다. – jklemmack
ClosedXML은 훌륭하게 작동했습니다. OpenXML을 사용하는 대신 처음부터 사용했으면 좋겠습니다. 다시 한 번 감사드립니다! – Jagd