MemoryStream으로 Open XML 스프레드시트를 만들 때 Excel 및 "읽을 수 없는 내용"
Open XML SDK v2.0을 사용하여 Excel 스프레드시트를 만들 때 Excel 출력이 처음에는 몇 달 동안 성공적으로 작동했습니다.최근 Excel(모든 버전)에서 "Excel이 'zot.xlsx'에서 읽을 수 없는 내용을 발견했습니다.이 워크북의 내용을 복구하시겠습니까?"웹 응용 프로그램에서 파일을 만들고 있습니다.MemoryStream
스토어로서, 그 다음에 로 보내집니다.byte[]
MIME 유형이 다음과 같은 HTTP 응답에서"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
불량 파일의 압축 해제된 내용이 오류 없이 파일의 압축 해제된 내용과 동일합니다.
우리는 너무 많은 시간 동안 이것을 추적했고, 도중에 빨간 청어 몇 개를 집어들었지만, 결국 나쁜 파일은 한 가지 점에서 다르다는 것을 확인했습니다.파일 길이가 다릅니다.반품하기 전에MemoryStream
그리고 쓰기.byte[]
HTTP 응답에 대해, 당신이 그것을 잘라내는지 확인하세요.MemoryStream
용량과 길이가 동일하도록 심플하게 사용하여stream.Capacity = (int)stream.Length;
.
Excel은 이제 파일의 추가 콘텐츠를 보안 위험으로 '읽을 수 없는 콘텐츠'로 감지하고 과거에는 위험을 감수했지만 성가신 오류를 발생시키는 것으로 보입니다.
참고: 이전에 질문에 답이 있었던 원래 포스터에서 가져온 답변
Excel에서 "읽을 수 없는 내용 오류"를 제거하려면 다음을 차례로 확인합니다.
1. 올바른 셀에 올바른 데이터가 기록되었는지 확인합니다. 모든 셀에 대해 데이터를 작성합니다.한 셀에 잘못 기록된 데이터로 인해 이 문제가 발생할 수 있습니다.셀 인덱스가 올바르게 사용되었습니다.
2. Cell을 사용해 봅니다.DataType = 새 EnumValue(셀 값)입니다.공유 문자열 대신 문자열).오류를 제거하는 데 도움이 될 수 있습니다.
3.셀에 #VALUE/#REF/#NAME? 또는 #DIV 오류가 있는 경우 해당 오류를 제거합니다.
4.서버에서 파일을 다운로드하는 동안 이 문제가 발생합니다.웹 애플리케이션에서 MemoryStream을 사용하여 Excel 스프레드시트를 만들고 이를 다운로드합니다.
다음 코드를 사용합니다.HttpContext입니다.현재의.대답.지우기()
Response.ClearHeaders()
Response.Buffer = False
msReportStream = CType(controller.GetFromSession
(Constants.SESSION_REPORT), MemoryStream)
Response.ContentType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet"
Response.AddHeader("Connection", "Keep-Alive")
Response.AddHeader("Content-Disposition", String.Format("attachment;
filename={0}", strReportFileName))
Response.ContentEncoding = Encoding.UTF8
Response.BinaryWrite(msPNLReportStream.ToArray())
Response.Flush()
Response.Close()
Response.End()--use this when the code is deployed in server only not required in local.gives error in local.
msReportStream.Dispose()
msReportStream.Close()
ASPOSE 기술을 사용하는 경우,
나. 응답.지우기()
Me.Response.Buffer = False
Me.Response.AddHeader("Accept-Ranges", "bytes")
Response.ContentType = "application/octet-stream"
Response.AddHeader("Connection", "Keep-Alive")
Response.ContentEncoding = Encoding.UTF8
asposeReport.ShowSavePopUp(Me.Response, controller.GetFromSession(Constants.SESSION_REPORT), strReportFileName)
Me.Response.Flush()
Me.Response.Close()
Me.Response.End()
Open XML SDK 2.5 Productivity Tool for Microsoft Office를 사용하여 .xlsx 파일을 열고 문서의 유효성을 검사하면 읽을 수 없는 내용을 야기하는 유효성 검사 오류가 발생합니다.
저에게 미묘한 일이 생겼습니다.제가 직접 전화를 해야 합니다.Flush()
에서.FileStream
이 파일이 없으면 Excel에서 복구해야 하는 손상된 파일이 생성될 수 있습니다.전화로 작동합니다.Dispose()
내부적으로 전화가 쇄도하기 때문에 마찬가지입니다.
언급URL : https://stackoverflow.com/questions/5842254/excel-and-unreadable-content-when-creating-an-open-xml-spreadsheet-with-memory
'programing' 카테고리의 다른 글
REST와 웹 서비스의 차이점 (0) | 2023.08.17 |
---|---|
Mariadb가 내부 주석 코드를 실행합니다. (0) | 2023.08.17 |
데이터베이스 테이블에서 오류를 확인할 수 없습니다. (0) | 2023.08.17 |
어떻게 하면 텍스트가 한 줄 이상 차지하는 것을 막을 수 있습니까? (0) | 2023.08.17 |
PHP 세션 ID 문자열의 길이는 얼마입니까? (0) | 2023.08.17 |