programing

MemoryStream으로 Open XML 스프레드시트를 만들 때 Excel 및 "읽을 수 없는 내용"

newstyles 2023. 8. 17. 20:58

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