2015-02-19 10 views
0

Сценарий: Я использую веб-приложение .net mvc4, в котором есть данные формы, которые я должен сначала преобразовать в формат Excel, и загрузить файл в формате .xlsx. для этого я использовал:Невозможно прочитать файл Xlsx с помощью Linq

List<UploadDownload> listItems = new List<UploadDownload>(); 
listItems = uploadDownload.ConvertToList(); 
gridView.DataSource = listItems.ToList(); 
gridView.DataBind(); 
gridView.Dispose(); 
Response.ClearContent(); 
Response.Buffer = true; 
Response.AddHeader("Content-Disposition", "attachment; filename=abc.xlsx"); 
Response.ContentType = "application/vnd.openxmlformats-  officedocument.spreadsheetml.sheet"; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 
gridView.RenderControl(htw); 
Response.Output.Write(sw.ToString()); 
Response.Flush(); 
Response.End(); 

Я успешно загруженный файл (abc.xlsx), но когда я хочу, чтобы прочитать файл с помощью LINQ «Предусмотренный формат файла» показать ошибку каждый раз.

Для чтения Скачано (abc.xlsx файл) Я использую следующий код:

 var excel = new ExcelQueryFactory(); 
     excel.FileName = filepath; 
     var StepList = excel.Worksheet(); 
     var Steps = from s in excel.WorksheetNoHeader() 

        select (string)s[1]; 

пожалуйста, помогите мне.!

+0

Для создания/чтения файлов Excel вам необходимо использовать COM-компоненты для взаимодействия с офисами, адаптер данных OLEDB, NPOI или аналогичные сторонние библиотеки. Они имеют специальную двоичную структуру; они не являются простыми строками, прилагаемыми к концу с расширением xlsx в конце. Для вышеупомянутых библиотек в Интернете много примеров. – mcy

+0

спасибо mcy за обмен ценными знаниями со мной ..! – AdityaK

ответ

1

Вы не можете просто написать содержимое сетки HTML в файл, а затем добавить расширение «.xlsx» в файл и дать ему правильное расположение контента и надеяться, что Excel сможет его прочитать.

Excel ожидает двоичный файл (его фактически zip-файл), и в нем есть целая структура, которая должна быть правильной. Если вы скопируете настоящий файл excel и измените расширение на .zip, тогда откройте его, вы увидите, что я имею в виду.

Вам нужно либо использовать библиотеку, чтобы написать правильный двоичный формат, который первенствует ожидает или написать сетку в формате CSV, и пусть Excel открыть его и сделать преобразование

+0

Спасибо, что дал мне правильный подход.! – AdityaK

1

Вы не можете просто прочитать файл Excel .XLSX без соответствующей библиотеки. Файл Excel .XLSX является зашифрованным XML-файлом, созданным MS.

MS Open XML SDK 2.5 - хороший ход, который я мог бы предложить. Пройдите через Documentation.

Пример кода для чтения .XLSX файлов: READ

Примечание: Open XML SDK построен таргетинг .XLSX формат файла (который является открытым форматом файла XML). ANd это своего рода преемник Interop

+0

Привет, спасибо за быстрый ответ, я использовал Open XML SDK, вот код для чтения внешнего файла (.xlsx): string constr = string.Format (@ "Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = { 0}; Расширенные свойства = "" Excel 12.0 Xml; HDR = YES; "" ", путь к файлу); OleDbConnection Econ = new OleDbConnection (constr); string Query = string.Format ("Выбрать * FROM [{0}]", "Sheet1"); OleDbCommand Ecom = новый OleDbCommand (Query, Econ); Econ.Open(); давая мне ошибку «Внешняя таблица не в ожидаемом формате». – AdityaK

+0

Я не мог доставить тебя туда. Вы создаете файл excel с помощью Open XML? И теперь вы хотите загрузить его и прочитать контент? AM I right :) –

+0

для загрузки я использовал подход привязки к сетке с ответом, и для чтения файла я только что создал constring, используя Microsoft.ACE.OLEDB.12.0, и передал путь к файлу, а затем выполнил описанный выше подход так же, как и мой предыдущий комментарий – AdityaK

Смежные вопросы