powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Топик ненависти к Open XML SDK
25 сообщений из 112, страница 4 из 5
Топик ненависти к Open XML SDK
    #38922464
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так допусти спашника до серверного программирования...
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922467
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Тогда достаточно в Response передать поток, временный файл не обязательно создавать.Да я знаю, просто речь зашла о больших документах, не влезающих в память сервера.А Controller.File Method (Stream, String) в память сервера пишет?
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922468
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если задача будет запилить честный сервлетик, взамен умирающего ASP.NET? Поэтому хватит игр, переходим на правильные платформы.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922478
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Да я знаю, просто речь зашла о больших документах, не влезающих в память сервера.А Controller.File Method (Stream, String) в память сервера пишет?Ну сгенерированный excel-документ где должен храниться?

Варианты:
1. byte[] или MemoryStream.
2. FileStream.

Понятно, что эти данные будут потом отданы на скачивание чем-то вроде того, на что ты дал ссылку.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922480
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу ты же сам сказал "чтобы не засирать память веб-сервера" (ц), с чем я согласен.
Ну так всё правильно. Теперь ты память не засираешь, уже хорошо. Но файл тут зачем? Ты сам заговорил про большие документы, не влезающие в оперативку сервера.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922486
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А Controller.File Method (Stream, String) в память сервера пишет?Ну сгенерированный excel-документ где должен храниться?

Варианты:
1. byte[] или MemoryStream.
2. FileStream.

Понятно, что эти данные будут потом отданы на скачивание чем-то вроде того, на что ты дал ссылку.Response.OutputStream?
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922494
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну сгенерированный excel-документ где должен храниться?

Варианты:
1. byte[] или MemoryStream.
2. FileStream.

Понятно, что эти данные будут потом отданы на скачивание чем-то вроде того, на что ты дал ссылку.Response.OutputStream?Заманчиво, но боюсь без промежуточного буфера не получится. Там пока концепция такая:

1. Пишем в поток заранее заготовленный excel-шаблон.
2. Делаем Seek(0, SeekOrigin.Begin)
3. Открываем SpreadsheetDocument.
4. Правим SpreadsheetDocument.
5. Сохраняем SpreadsheetDocument, вызвав его Dispose.

Боюсь, что Response.OutputStream не умеет Seek. :-)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922514
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...
Ну так всё правильно. Теперь ты память не засираешь, уже хорошо. Но файл тут зачем? Ты сам заговорил про большие документы, не влезающие в оперативку сервера.
new File(Stream) - какая оперативка? какие файлы? :)

Алексей КБоюсь, что Response.OutputStream не умеет Seek. :-)
Что ты куришь, бро? :) https://msdn.microsoft.com/ru-ru/library/system.io.stream.seek(v=vs.110).aspx
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922518
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КБоюсь, что Response.OutputStream не умеет Seek. :-)
Что ты куришь, бро? :) https://msdn.microsoft.com/ru-ru/library/system.io.stream.seek(v=vs.110).aspx

Алексей прав.

https://msdn.microsoft.com/ru-ru/library/system.io.stream.canseek(v=vs.110).aspx

не все потоки могут делать Seek
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922528
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУпропущено...

Что ты куришь, бро? :) https://msdn.microsoft.com/ru-ru/library/system.io.stream.seek(v=vs.110).aspx

Алексей прав.

https://msdn.microsoft.com/ru-ru/library/system.io.stream.canseek(v=vs.110).aspx

не все потоки могут делать Seek

Так там поток от SpreadsheetDocument, он это умеет делать 100%.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922532
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУпропущено...

Что ты куришь, бро? :) https://msdn.microsoft.com/ru-ru/library/system.io.stream.seek(v=vs.110).aspx

Алексей прав.

https://msdn.microsoft.com/ru-ru/library/system.io.stream.canseek(v=vs.110).aspx

не все потоки могут делать SeekМожно конечно попробовать отказаться от необходимости Seek, но хрен его знает...
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922534
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну вы что, какой Seek. Пишем chunk в OutputStream, делаем Flush.
Алексею пока не подходит :) Код надо переписывать.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922536
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУhVosttпропущено...


Алексей прав.

https://msdn.microsoft.com/ru-ru/library/system.io.stream.canseek(v=vs.110).aspx

не все потоки могут делать Seek

Так там поток от SpreadsheetDocument, он это умеет делать 100%.skyANA предложил, чтобы SpreadsheetDocument писал сразу в Response.OutputStream. Ты всё перепутал!
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922539
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДа ну вы что, какой Seek. Пишем chunk в OutputStream, делаем Flush.
Алексею пока не подходит :) Код надо переписывать.Да там переписать не проблема, масштабы пока не те. :-)

Сделаю пока чтобы хоть как-то работало, потом буду бантики добавлять. Меня пока больше беспокоит расчёт ширины колонок. :-)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922615
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сцуко, а ведь SpreadsheetDocument на Response.OutputStream не приготовишь... http://stackoverflow.com/questions/17888076/openxml-cannot-open-package-because-filemode-or-fileaccess-value-is-not-valid-fo

Как-то надо выкручиваться через пакеты из System.IO.Packaging. Как вариант OpenXmlPackage. Но как, пока не разобрался. Остаётся пока оверхедить в память или файл.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922776
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУСцуко, а ведь SpreadsheetDocument на Response.OutputStream не приготовишь... http://stackoverflow.com/questions/17888076/openxml-cannot-open-package-because-filemode-or-fileaccess-value-is-not-valid-fo

Как-то надо выкручиваться через пакеты из System.IO.Packaging. Как вариант OpenXmlPackage. Но как, пока не разобрался. Остаётся пока оверхедить в память или файл.Ипать, зато умные все вокруг, про Response.OutputStream знают...
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922786
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На Stream.Null работает, но вот как потом из спредшита снять поток... Ушлепки опен иксэмэльные! MS точно сгибается, надо в Java валить :)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922856
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНа Stream.Null работает, но вот как потом из спредшита снять поток...Забей. :-)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38923002
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУСцуко, а ведь SpreadsheetDocument на Response.OutputStream не приготовишь... http://stackoverflow.com/questions/17888076/openxml-cannot-open-package-because-filemode-or-fileaccess-value-is-not-valid-fo

Как-то надо выкручиваться через пакеты из System.IO.Packaging. Как вариант OpenXmlPackage. Но как, пока не разобрался. Остаётся пока оверхедить в память или файл.

не всё то сикается, что стрим
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38923006
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУУшлепки опен иксэмэльные! MS точно сгибается, надо в Java валить :)

та не, надо покупать нормальные компоненты, они те и носки постирают, и кофе сварят, и эстетически удовлетворят. а халява-сэр, хоть и сладка как уксус, но таки за что не заплатил, то и получи!
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38923171
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фиг с вами, убедили :) Но, всё-равно, это нечестно и кривожопно!

Код: html
1.
@Html.ActionLink("Скачать файл", "GetFile", "Home")



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public ActionResult GetFile()
{
    var stream = new MemoryStream(); // todo FileStream

    using (var spreadsheet = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
    {
        var workbookPart = spreadsheet.AddWorkbookPart();
        workbookPart.Workbook = new Workbook { Sheets = new Sheets() };

        var sheetPart = workbookPart.AddNewPart<WorksheetPart>();
        sheetPart.Worksheet = new Worksheet(new SheetData());

        var sheet = new Sheet { Id = workbookPart.GetIdOfPart(sheetPart), SheetId = 1, Name = "Лист" };
        workbookPart.Workbook.Sheets.Append(sheet);
    }

    stream.Position = 0; 
    return File(stream, "application/vnd.ms-excel", "report.xlsx");
}
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38924421
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отпишу навсякий...

Не понравилась мне эта формула для расчёта ширины колонки. Остановился пока на такой формуле:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        public double GetCellWidth(SpreadsheetDocument document, Cell cell)
        {
            var cellText = GetCellText(document, cell);

            if (string.IsNullOrEmpty(cellText))
                return 0.0;

            using (var font = GetCellDrawingFont(document, cell))
            {
                double textWidth = Graphics.MeasureString(cellText, font).Width;

                double maxDigitWidth = Enumerable
                    .Range(0, 10)
                    .Max(i => Graphics.MeasureString(i.ToString(), font).Width);

                return (textWidth + 5.0) * 1.75 / maxDigitWidth;
            }
        }
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38924485
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

отличный способ. щас МСУ утянет его в свои рецепты
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38924494
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей К,

отличный способ. щас МСУ утянет его в свои рецепты Я не понял, это похвала или сарказм? :-)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38924536
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс... :-)

Предыдущая формула не работает для разных размеров шрифтов. Ниже исправленный вариант, навсякий...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        public double GetCellWidth(SpreadsheetDocument document, Cell cell)
        {
            var cellText = GetCellText(document, cell);

            if (string.IsNullOrEmpty(cellText))
                return 0.0;

            using (var cellDrawingFont = GetCellDrawingFont(document, cell))
            using (var defaultDrawingFont = GetDefaultDrawingFont(document))
            {
                double cellTextWidth = Graphics.MeasureString(cellText, cellDrawingFont).Width;

                double maxDigitWidth = Enumerable
                    .Range(0, 10)
                    .Max(i => Graphics.MeasureString(i.ToString(), defaultDrawingFont).Width);

                return (cellTextWidth + 5.0) * 1.75 / maxDigitWidth;
            }
        }
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 4 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Топик ненависти к Open XML SDK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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