Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET Формирование excel файла. Траблы / 18 сообщений из 18, страница 1 из 1
14.07.2014, 07:58
    #38695603
hstas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
Всем привет.

Дано: Web приложение в интранете. Домен, все дела. IIS 7.5. Пул запущен под учеткой с правами делегирования. Т.е. сайт работает на Проверка подлинности Windows + олицетворение + делегирование прав.

Формирую экселевский файл через COM на основании шаблона. Excel стоит 2010 версии.
В шаблоне есть вставленная картинка (логотип компании).
Алгоритм следующий:
1. создаем инстанс Экселя (т.к. пул имеет делегирование, то инстанс запускается от имени пользователя)
2. открываем шаблон.
3. заполняем шаблон данными
4. сохраняем файл
5. передаем файл на download

У меня (с моими сетевыми правами) при сохранении файла, логотип остается на месте.
Когда эксель формируют обычные юзеры, рисунок в файле исчезает. Явно не хватает каких-то прав.
Я уже вставлял рисунок программно, через Shapes.AddPicture , все равно рисунок пропадает.

Права на DCOM пользователям даны. Уже не знаю, куда копать.

Может быть можно дать учетке под которым пул запущен дать больше прав, и Эксель формировать из под нее?
Как это сделать, при текущих настройках (Проверка подлинности Windows + олицетворение + делегирование прав)?
...
Рейтинг: 0 / 0
14.07.2014, 09:26
    #38695629
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
...
Рейтинг: 0 / 0
14.07.2014, 09:28
    #38695630
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
...
Рейтинг: 0 / 0
14.07.2014, 10:03
    #38695660
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
Тыщу раз уже говорили, не использовать офисный com интероп на сервере. Да и вообще не использовать.

Что использовать? Open XML SDK 2.5
...
Рейтинг: 0 / 0
14.07.2014, 11:11
    #38695710
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
мсущкоЧто использовать? Open XML SDK 2.5
Увы, не соглашусь - Open XML SDK, это практически правка XML вручную - различия минимальны.
Конкретно для Excel есть очень удобная обертка поверх Open XML SDK ClosedXML . Самое приятное для ТС - API довольно близок к API самого Excel, а значит переписать будет проще.
...
Рейтинг: 0 / 0
14.07.2014, 11:11
    #38695711
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
мсущкоЧто использовать? Open XML SDK 2.5

ну или "раскошелиться" (ето копейки даже для самой нищебродской компании на свете).

что же это за страсть, -- пытаться делать всё именно через задницу, не пойму.
...
Рейтинг: 0 / 0
14.07.2014, 11:32
    #38695746
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hVostt,
авторчто же это за страсть, -- пытаться делать всё именно через задницу
Отчего же Вы так иронически относитесь к нашему основному жизненному кредо?
...
Рейтинг: 0 / 0
14.07.2014, 11:59
    #38695780
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
Где-то в степиОтчего же Вы так иронически относитесь к нашему основному жизненному кредо?

а Мы стораемся к нему не относится
...
Рейтинг: 0 / 0
14.07.2014, 12:37
    #38695828
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hstas,

эксплуатируй sql reporing services - гораздо лучше решение будет
...
Рейтинг: 0 / 0
14.07.2014, 12:40
    #38695837
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
мсущкоТыщу раз уже говорили, не использовать офисный com интероп на сервере.

нужно повторить не менее 6000 раз
...
Рейтинг: 0 / 0
14.07.2014, 14:25
    #38695960
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
МихаилРмсущкоЧто использовать? Open XML SDK 2.5
Увы, не соглашусь - Open XML SDK, это практически правка XML вручную - различия минимальны.
Это не правка XML вручную, это гибкая и мощная объектная модель. Нравятся более внятные врапперы типа ClosedXML, пожалуйста. Единственное, меня смущает отсутствие поддержки 13 офиса. Странно.
...
Рейтинг: 0 / 0
16.07.2014, 07:35
    #38697409
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
мсущкоЭто не правка XML вручную, это гибкая и мощная объектная модель.
Практически не отличимо. Модель процентов на 80% это сгенерированные по XSD классы. В этом легко убедиться взглянув на их репозиторий на GitHub

мсущкоНравятся более внятные врапперы типа ClosedXML, пожалуйста.
Ну собственно да, я про это и говорю, что лучше использовать хорошие врапперы - код упрощается разве что не на порядки.

Но вообще говоря для нужд ТС, я подозреваю куда лучше и проще использовать механизм XML Mapping. И шаблоны можно будет править прямо в Excel, и код генерации будет простой до невозможности (сгенерировать XML и вставить её в нужную part Excel-документа).

мсущкоЕдинственное, меня смущает отсутствие поддержки 13 офиса. Странно.
Вы про ClosedXML или про OpenXML SDK? В последнем поддержка есть (пространство имен DocumentFormat.OpenXml.Office2013), но для Excel там добавлилась только поддержка PowerPivot, на сколько я могу судить. Имхо, особой необходимости манипулировать этим на уровне разбора документа нет смысла.
...
Рейтинг: 0 / 0
16.07.2014, 13:05
    #38697808
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
МихаилРмсущкоЭто не правка XML вручную, это гибкая и мощная объектная модель.
Практически не отличимо. Модель процентов на 80% это сгенерированные по XSD классы. В этом легко убедиться взглянув на их репозиторий на GitHub
Зачем мне смотреть на GitHub, я лучше посмотрю на код, который успешно использую.

http://codearticles.ru/articles/2419
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
using (var workbook = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
            {
                var workbookPart = workbook.AddWorkbookPart();
                workbook.WorkbookPart.Workbook = new Workbook();
                workbook.WorkbookPart.Workbook.Sheets = new Sheets();

                foreach (DataTable table in dataset.Tables)
                {
                    var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
                    var sheetData = new SheetData();
                    sheetPart.Worksheet = new Worksheet(sheetData);

                    var sheets = workbook.WorkbookPart.Workbook.GetFirstChild<Sheets>();
                    string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart);
                    uint sheetId = sheets.Elements<Sheet>().Count() > 0 ? sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1 : 1;

                    var sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = table.TableName };
                    sheets.Append(sheet);

                    var headerRow = new Row();

                    var columns = new List<string>();
                    foreach (System.Data.DataColumn column in table.Columns)
                    {
                        columns.Add(column.ColumnName);

                        var cell = new Cell();
                        cell.DataType = CellValues.String;
                        cell.CellValue = new CellValue(column.ColumnName);
                        headerRow.AppendChild(cell);
                    }


                    sheetData.AppendChild(headerRow);

                    foreach (DataRow dsrow in table.Rows)
                    {
                        var newRow = new Row();
                        foreach (String col in columns)
                        {
                            var cell = new Cell();
                            cell.DataType = CellValues.String;
                            cell.CellValue = new CellValue(dsrow[col].ToString());
                            newRow.AppendChild(cell);
                        }

                        sheetData.AppendChild(newRow);
                    }

                }
            }
        }



Откуда тут XSD и прочая XML-щина? Вполне себе внятная модель.

МихаилРНу собственно да, я про это и говорю, что лучше использовать хорошие врапперы - код упрощается разве что не на порядки.
Вопрос лишь в том, где найти эти "хорошие" врапперы. Если бы был единый стабильный враппер для офиса от уважаемого вендора или комьюнити, это одно. А побираться по кодплексам и использовать какие-то грабли, не моё. Для excel - один враппер от непойми кого, для word - другой, для ppt - третий. Нет уж, спасибо.

МихаилРНо вообще говоря для нужд ТС, я подозреваю куда лучше и проще использовать механизм XML Mapping. И шаблоны можно будет править прямо в Excel, и код генерации будет простой до невозможности (сгенерировать XML и вставить её в нужную part Excel-документа).
XML Mapping ему точно не нужен. Либо внятный Reporting Services (без серверной части можно использовать - вот тут пример), либо использовать нормальную объектную модель open xml.

МихаилРмсущкоЕдинственное, меня смущает отсутствие поддержки 13 офиса. Странно.
Вы про ClosedXML или про OpenXML SDK? В последнем поддержка есть (пространство имен DocumentFormat.OpenXml.Office2013), но для Excel там добавлилась только поддержка PowerPivot, на сколько я могу судить. Имхо, особой необходимости манипулировать этим на уровне разбора документа нет смысла.
Про ClosedXML, разумеется.
https://closedxml.codeplex.com/ ClosedXML makes it easier for developers to create Excel 2007/2010 files.
...
Рейтинг: 0 / 0
17.07.2014, 09:13
    #38698578
hstas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
Посмотрел ClosedXML.
Вставлять картинки в файл он не умеет, но можно сделать сразу шаблон со вставленным логотипом и заполнить его.

Однако не смог реализовать простейшей вещи - как найти ячейку по содержимому?
Подобно экселевсому методу
Код: c#
1.
exWSheet.Cells.Find(...)?
...
Рейтинг: 0 / 0
17.07.2014, 12:12
    #38698826
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hstasПосмотрел ClosedXML.
Посмотрел? А теперь закрой и забудь.

hstasВставлять картинки в файл он не умеет, но можно сделать сразу шаблон со вставленным логотипом и заполнить его.
Вставка картинки через OpenXML: http://codearticles.ru/articles/2476

hstasОднако не смог реализовать простейшей вещи - как найти ячейку по содержимому?
Проще пареной репы: http://msdn.microsoft.com/en-us/library/office/hh298534(v=office.15).aspx
...
Рейтинг: 0 / 0
18.07.2014, 08:43
    #38699903
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hstasВставлять картинки в файл он не умеет.
Увы, да.

hstasОднако не смог реализовать простейшей вещи - как найти ячейку по содержимому?
Например, так (я правда не знаю точную семантику метода Find, но навскидку он ищет среди используемых ячеек по вхождению):
Код: c#
1.
2.
3.
4.
5.
6.
7.
var workBook = new XLWorkbook(@"Sample.xlsx");
var workSheet = workBook.Worksheet(1);

var findingValue = "Some value";

var findedCells =  workSheet.CellsUsed(cell => cell.GetString().Contains(findingValue));
findedCells.ForEach(cell => Console.WriteLine(cell.Address + " : " + cell.GetString()));



hstasно можно сделать сразу шаблон со вставленным логотипом и заполнить его.
И все же, почему бы при таком варианте не посмотреть на мехнизм XML Mapping?
Т.е. вы нарисуете в Excel Сам шаблон, сделаете привязку к XML, а потом только знай меняй XML с данными.
...
Рейтинг: 0 / 0
18.07.2014, 09:26
    #38699949
hstas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hstasОднако не смог реализовать простейшей вещи - как найти ячейку по содержимому?
Проще пареной репы: http://msdn.microsoft.com/en-us/library/office/hh298534(v=office.15).aspx [/quot]

Это немного не то. Тут адрес ячейки известен, а мне наоборот надо получить ссылку на ячейку, зная ее значение.
Эдакий аналог поиска заметок в Word.
...
Рейтинг: 0 / 0
18.07.2014, 11:04
    #38700094
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET Формирование excel файла. Траблы
hstasЭто немного не то. Тут адрес ячейки известен, а мне наоборот надо получить ссылку на ячейку, зная ее значение.
Эдакий аналог поиска заметок в Word.
Ну дак это пример. Что мешает убрать addressName из запроса и в цикле пробежаться по всем ячейкам?

Код: c#
1.
Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();



Код: c#
1.
var cells = wsPart.Worksheet.Descendants<Cell>();
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET Формирование excel файла. Траблы / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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