sourcecode

Excel 파일을 열면 "워크북 내용 복구" 메시지 상자가 나타납니다.

copyscript 2023. 9. 16. 09:49
반응형

Excel 파일을 열면 "워크북 내용 복구" 메시지 상자가 나타납니다.

Excel 파일을 열려는 중에 "파일 이름의 일부 내용에 문제가 있습니다."라는 메시지 상자가 나타납니다. 우리가 할 수 있는 한 회복하기 위해 노력하길 바라나요?워크북의 출처를 신뢰할 경우 "예"를 누릅니다.실제로 한 일은 엑셀 템플릿이 설계되어 파일을 다른 파일에 복사하고 임시 파일을 만든 것입니다. 오픈 XML을 사용하여 임시 파일에 데이터를 삽입하고 데이터베이스에서 데이터를 가져옵니다.

인터넷에 제공된 해결책을 시도해 보았지만 해결책이 제 문제를 해결하지 못합니다.저의 엑셀은 2010년 입니다.

enter image description here

enter image description here

어떤 해결책이라도 제공해 주시면 감사하겠습니다.

제가 이런 문제가 있었습니다.그것은 제가 숫자와 문자열을 셀에 저장하는 방식 때문입니다.

를 이용하여 간단하게 번호를 할 수 .cell.CellValue = new CellValue("5")가 아닌의 경우 문자열의 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .그런 다음 셀의 데이터 유형을 SharedString으로 변경하고, SharedStringTable에서 셀의 값을 문자열의 인덱스로 설정합니다.

// Here is the text I want to add.
string text = "Non-numeric text.";

// Find the SharedStringTable element and append my text to it.
var sharedStringTable = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First().SharedStringTable;
var item = sharedStringTable.AppendChild(new SharedStringItem(new Text(text)));

// Set the data type of the cell to SharedString.
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);

// Set the value of the cell to the index of the SharedStringItem.
cell.CellValue = new CellValue(item.ElementsBefore().Count().ToString());

이에 대한 설명은 다음 문서에서 확인할 수 있습니다. http://msdn.microsoft.com/en-us/library/office/cc861607.aspx

이러한 유형의 오류를 발생시킬 수 있는 다른 몇 가지 경우:

  • 시트 이름이 31자보다 깁니다.
  • 시트 이름에 잘못된 문자가 있습니다.
  • 값이 32k보다 긴 셀이 있습니다.

문제는 사용으로 인해 발생합니다.

꾸러미의저장();

그리고.

꾸러미의GetAsByteArray();

동시에

우리가 부르면

꾸러미의GetAsByteArray();

다음과 같은 작업을 수행할 것입니다.

이거. 워크북.저장(); 이것._실제로.닫기(); 이것._실제로.저장합니다._stream);

따라서 제거하기

꾸러미의저장();

이 문제를 해결할 것입니다. "파일 이름의 일부 내용에 문제가 있습니다. 우리가 할 수 있는 한 회복하기 위해 노력하길 바라나요? 이 워크북의 출처를 신뢰하는 경우 예를 클릭합니다."

스타일의 최대 수를 초과할 수도 있습니다.

다음을 정의할 수 있습니다.

  • .xls 워크북에서 최대 4000개의 스타일
  • .xlsx 워크북에서 최대 64000개의 스타일

이 경우 모든 셀에 대해 새 셀 스타일을 만들지 말고 여러 셀에 대해 동일한 셀 스타일을 다시 사용해야 합니다.

올바른 cellReference를 추가하고 이 문제를 해결했습니다.

string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
for (int colInx = 0; colInx < reader.FieldCount; colInx++)
{
    AppendTextCell(alpha[colInx] + "1", reader.GetName(colInx), headerRow);
}

private static void AppendTextCell(string cellReference, string cellStringValue, Row excelRow)
{
    //  Add a new Excel Cell to our Row 
    Cell cell = new Cell() { CellReference = cellReference, DataType = new EnumValue<CellValues>(CellValues.String) };
    CellValue cellValue = new CellValue();
    cellValue.Text = cellStringValue.ToString();
    cell.Append(cellValue);
    excelRow.Append(cell);
}

같은 경고이지만 저의 문제는 제가 파일의 시트 이름으로 클라이언트 입력(웨이브의 이름)을 사용하고 있었고 이름에 날짜가 표시되었을 때 날짜 부분 구분자로 사용된 '/' 문자가 문제를 일으켰습니다.

마이크로소프트는 사람들이 그런 사소한 문제를 조사하는 데 시간을 절약할 수 있도록 더 나은 오류 로그를 제공해야 한다고 생각합니다.제 대답이 다른 사람의 시간을 절약할 수 있기를 바랍니다.

문제는 셀을 직접 사용하여 셀에 문자열을 저장하기 때문입니다.CellValue = 새 CellValue("텍스트").이런 숫자는 저장할 수 있지만 문자열은 저장할 수 없습니다.문자열의 경우 Cell을 사용하여 텍스트를 할당하기 전에 데이터 유형을 문자열로 정의합니다.DataType = 셀 값.문자열;

언급URL : https://stackoverflow.com/questions/15675710/opening-excel-file-prompts-a-message-box-content-recovery-of-the-workbook

반응형