Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сериализовать несериализуемое? (object Excel -> byte[]) / 9 сообщений из 9, страница 1 из 1
15.05.2014, 10:15
    #38641825
НовыйЯ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
Если созданный объект Excel записать на диск, а потом считать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            if (File.Exists("C:\\tmp.xlsx"))
            File.Delete("C:\\tmp.xlsx");
            ObjWorkBook.SaveAs("C:\\tmp.xlsx");

            //Закрытие книгу Excel.
            ObjWorkBook.Close();
            //Закрытие приложения Excel.
            ObjExcel.Quit();
            //Обнуляем созданые объекты
            ObjWorkBook = null;
            ObjWorkSheet = null;
            ObjExcel = null;
            //Вызываем сборщик мусора для их уничтожения и освобождения памяти
            GC.Collect();
            
            byte[] file = File.ReadAllBytes("C:\\tmp.xlsx");


То цель достигнута, но через "так делать не надо".

Но при попытке сериализовать Excel сразу, без сохранения,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private static byte[] ObjectToByteArray(Object obj)
        {
            if (obj == null)
                return null;
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            bf.Serialize(ms, obj);
            return ms.ToArray();
        }


разумеется получаю ошибку о том, что объект несереализуемый.

И как же его пометить Serializable, если это не собственноручно созданный класс?

Или есть какой-то другой способ получить byte[] из Excel, которого я не нагуглил?
...
Рейтинг: 0 / 0
15.05.2014, 10:37
    #38641871
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
Бред сивой кобылы.

>Если созданный объект Excel записать на диск, а потом считать

Это не "объект эксель", а рабочая книга в формате excel 2007+

>То цель достигнута, но через "так делать не надо".

Только так делать и надо.

>Или есть какой-то другой способ получить byte[] из Excel

Нет никакого способа "получить byte[] из Excel" потому что эта фраза не имеет смысла.
...
Рейтинг: 0 / 0
15.05.2014, 11:39
    #38641979
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
AntonariyТолько так делать и надо.
уверен?
...
Рейтинг: 0 / 0
15.05.2014, 12:15
    #38642053
НовыйЯ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
AntonariyБред сивой кобылы.

>Если созданный объект Excel записать на диск, а потом считать

Это не "объект эксель", а рабочая книга в формате excel 2007+

>То цель достигнута, но через "так делать не надо".

Только так делать и надо.

>Или есть какой-то другой способ получить byte[] из Excel

Нет никакого способа "получить byte[] из Excel" потому что эта фраза не имеет смысла.
Рабочая книга в данном случае является экземпляром класса Microsoft.Office.Interop.Excel.Workbook, то есть, объектом.

А то, что Вы привыкли всё делать "как-нибудь, чтоб работало" - дело Ваше, но это не отменяет существования альтернатив.

Так что попрошу обойтись без буквоедства, раз по сути вопроса Вам сказать нечего.

Спасибо за понимание.
...
Рейтинг: 0 / 0
15.05.2014, 12:33
    #38642082
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
НовыйЯРабочая книга в данном случае является экземпляром класса Microsoft.Office.Interop.Excel.Workbook, то есть, объектом.
сериализация этого объекта - это и есть получение эксельного файла

Если без рукоблудия - забыть про COM интероп и работать с office SDK http://msdn.microsoft.com/ru-ru/library/office/bb448854(v=office.15).aspx
...
Рейтинг: 0 / 0
15.05.2014, 12:59
    #38642136
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
Изопропил уверен?Уверен в том смысле, что делать это нужно экселевскими средствами. Конкретно под com я не подпишусь :)

НовыйЯРабочая книга в данном случае является экземпляром класса Microsoft.Office.Interop.Excel.Workbook, то есть, объектом.Xslx-файл не является сериализованным объектом Microsoft.Office.Interop.Excel.Workbook в том строгом смысле, который определяется с помощью Serializable, как не являются ими xls, xslm и прочие форматы экселевских файлов. Хотя бы потому что xslx это zip-архив с целой кучей файлов.

Другими словами, файл сделан не по общим правилам Serializable, а по внутренним правилам экселя. Ну а "получить byte[] из Excel" (даже не Workbook) вообще не имеет смысла ни с какой точки зрения, кроме дампа оперативной памяти.
...
Рейтинг: 0 / 0
15.05.2014, 13:14
    #38642153
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
НовыйЯРабочая книга в данном случае является экземпляром класса Microsoft.Office.Interop.Excel.Workbook, то есть, объектом.

Microsoft.Office.Interop.Excel.Workbook не класс, а интерфейс, чувствуете разницу?
...
Рейтинг: 0 / 0
15.05.2014, 13:18
    #38642161
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
AntonariyКонкретно под com я не подпишусь :)
я уж испугался :)
...
Рейтинг: 0 / 0
15.05.2014, 13:41
    #38642194
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сериализовать несериализуемое? (object Excel -> byte[])
pationНовыйЯРабочая книга в данном случае является экземпляром класса Microsoft.Office.Interop.Excel.Workbook, то есть, объектом.

Microsoft.Office.Interop.Excel.Workbook не класс, а интерфейс, чувствуете разницу?Еще один буквоед!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сериализовать несериализуемое? (object Excel -> byte[]) / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]