Проблема с использованием openxml

При создании документа Excel во время выполнения я получаю следующую ошибку:

Excel found unreadable content in 'Filename.xlsx'. Do you want to recover the content of this workbook? If you trust the source of this workbook, Click yes.

Я видел много сообщений об этом о переполнении стека, но они не помогли мне в этой ситуации.

Ниже мой код C#, который (пытается) создать файл Excel:

var workbook = new XLWorkbook();
System.Data.DataTable Table = new System.Data.DataTable();
string AdvId = GlobalEntityID + "-" + AyId + "-" + QtrID;
var CSRExpenditureData = objCsrExp.GetCSRExpendituresFromSP(AdvId); //Get data in list from sp
Table = ListToDataTable(CSRExpenditureData); //Convert list to datatable 
Table.Columns.Remove("ID");        //Remove extra columns
Table.Columns.Remove("IsActive");  //Remove extra columns
Table.Columns.Remove("IsDefault"); //Remove extra columns
Table.Columns.Remove("IsSubmit");  //Remove extra columns


if (Table.Columns.Count > 0)
{
    var ws = workbook.Worksheets.Add(Table, ReportName); 
}

workbook.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
workbook.Style.Font.Bold = true;
Response.Clear();
Response.Buffer = true;

Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + ReportName + ".xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
    workbook.SaveAs(MyMemoryStream);
    MyMemoryStream.WriteTo(Response.OutputStream);  
}

ExcelError

Примечание: пожалуйста, не помечайте это как повторяющееся, потому что я пробовал и другие сообщения.

пожалуйста, исправьте свой пост - не вижу ошибки

Jazb 26.10.2018 08:50

@JohnB Я исправил это

vishu minhas 26.10.2018 08:53

Пакет SDK Open XML не ограничивает создание действительного документа. Однако есть класс OpenXmlValidator, который можно использовать для сообщения об ошибках в сгенерированном документе. Пример: blogs.msdn.com/b/brian_jones/archive/2009/09/24/…

Jazb 26.10.2018 09:04

Вы используете какую-либо библиотеку, такую ​​как EPPlus, ClosedXML или что-то подобное? (т.е. откуда взялся класс XLWorkbook?)

bassfader 26.10.2018 09:17

@bassfader да, мы используем эту библиотеку

vishu minhas 26.10.2018 09:21

@vishuminhas так какая именно библиотека? EPPlus или ClosedXML? Или какую-нибудь другую библиотеку?

bassfader 26.10.2018 09:22

@bassfader с использованием ClosedXML

vishu minhas 26.10.2018 09:24

@shunty спасибо за предложения, но это не сработало :(

vishu minhas 26.10.2018 09:48

Вам нужно установить позицию потока на 0? т.е. MyMemoryStream.Seek(0, SeekOrigin.Begin); до звонка на WriteTo?

petelids 26.10.2018 09:51

Нет, я не устанавливаю позицию потока на 0. Что, если я так сделаю?

vishu minhas 26.10.2018 09:56

Я не уверен насчет ClosedXml, но, конечно, с OpenXml вам нужно сбросить поток в начало, иначе вы не получите правильного результата - см. stackoverflow.com/questions/36283476/…

petelids 26.10.2018 10:02

Я попытался установить позицию потока на 0, но безуспешно.

vishu minhas 26.10.2018 10:51

Если вы сохраните XLWorkbook в локальный файл (не в поток) и откроете этот файл, будет ли он действителен? Если да, то проблема в доставке клиенту браузера.

Francois Botha 31.10.2018 12:06
0
13
198
0

Другие вопросы по теме