현재 OpenXML SDK를 사용하고 있으며 OpenXML 값과 비교하여 Excel에 표시된 값에 문제가 있습니다.Excel 값과 다른 OpenXML 값
기본적으로 B4의 값이 "202"인 스프레드 시트가 있습니다. 그러나 OpenXml을 사용하여 스프레드 시트에서 값을 읽을 때받는 값은 "201.99999999999997"입니다.
다음과using (SpreadsheetDocument document = SpreadsheetDocument.Open(_excelFile1, false))
{
WorkbookPart wbPart = document.WorkbookPart;
var sheet = wbPart.Workbook.Descendants<Sheet>().First();
var wsPart = (WorksheetPart)(wbPart.GetPartById(sheet.Id));
Cell cell1 = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "B4").FirstOrDefault();
Cell cell2 = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "C4").FirstOrDefault();
Cell cell3 = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "D4").FirstOrDefault();
Console.WriteLine(String.Format("Cell B4: {0}", GetCellValue(cell1)));
Console.WriteLine(String.Format("Cell C4: {0}", GetCellValue(cell2)));
Console.WriteLine(String.Format("Cell D4: {0}", GetCellValue(cell3)));
}
private static string GetCellValue(Cell cell)
{
if (cell != null) return cell.CellValue.InnerText;
else return string.Empty;
}
그럼 내가 얻는 가치로 :
내가 값을 확인하는 테스트 응용 프로그램을 작성했습니다및 코드 나는 다음과 같이 OPENXML이 사용하여 Excel 파일을 읽기 위해 사용하고
Cell B4: 201.99999999999997
이
[UPDATE - XLSX 파일에서 RAW XML] 당신이 XLSX 파일 XML에서 볼 수 그래서
<row r="4" spans="1:4" x14ac:dyDescent="0.2">
<c r="A4" s="2">
<v>39797</v>
</c>
<c r="B4" s="3">
<v>201.99999999999997</v>
</c>
<c r="C4" s="3">
<v>373</v>
</c>
<c r="D4" s="3">
<v>398</v>
</c>
</row>
는 OpenXML과는 올바른 값을 읽는 중. 그러나 "201.99999999999997"값을 "202"로 표시하려면 Excel에서 일종의 서식을 적용해야합니다. 이것은 사용자가 볼 수있는 값이므로 OpenXML을 사용하여 XLSX 파일에서 읽을 때 예상되는 값입니다.
그래서 이제는 사용자가 스프레드 시트에서 볼 때 값을 얻기 위해 Excel에서 적용한 서식을 알고 있지만 OpenXML을 사용하고 있는지 궁금합니다.
테스트로 스프레드 시트를 다시 만들려고했지만 스프레드 시트에 정수를 입력 할 때 값이 소수로 표시되는 경우가 있습니다. 매우 간헐적이며 문제를 설명하거나 해결할 수 없습니다.
'GetCellValue'는 "나만의"방법이라고 가정합니다. 이 방법에 대한 구현도 제공하십시오. –
셀 B4에 대한 완전한 XML 데이터를 추출하여 표시 할 수 있다면 또한 좋을 것입니다. –
완료! 죄송합니다. – Simon