Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Для тех кто создает отчеты в Excel и юзает Pivot Table
|
|||
|---|---|---|---|
|
#18+
Всем привет. Я долго мучался над одной задачей, причем так и не смог найти в сети примеров как это надо делать. Тем не менее задачу саму я добил :) (ура), и поэтому хочу поделиться решением с народом. Описание задачи: Коротко: Изменить средствами C#, DataSource в Excel-ом Pivot. Более подробно: Вообщем, задача создания отчетом для пользователей. Допустим каждый пользователь относится к конкретному городу, соответственно одинаковый отчет должен быть представлен каждому клиенту отфильтрованным по его городу. Как средство представления был выбран Excel (2000 если быть точнее, ибо на него была лицензия). Т.е. каждый пользователь должен был при нажатии на кнопочку "Сгенерить отчет" получить отчетик в виде сводной таблицы где содержится пивот с торговыми точками, которые относятся к конкретно взятому городу. В начале создаем шаблон со сводной таблицей. Далее алгоритм такой - шаблон копируется в темповый файл, у него меняется датасорс (добавляется условие where для вьюшки), рефрешится и подсовывается юзеру. Ну так вот. Используется соответственно Excel Automatization (или как это называется), который как выяснялось очень криво работает особенно по сравнению с чудненькой и логичненькой .NET (короче уежище). Кое как достучавшись до пивота в этой фиговой объектной модели Екселя и найдя там его сорс (SourceData), который мало того что представляет собой массив из строк, которые логически объединяются в одну (и нафиг спрашивается так? опять же естестсвенное предположение, что у каждой из них длина ограничена), так этот сорс также находится в другом свойстве PivotCache и в нескольких местах (офигеть). Короче ни одного из этих свойств изменить не получилось. Кстати, by the way, объясните мне, пожалуйста, следующию вещь. Возможно я что-то не понимаю в COM. Вот, когда я делаю так: Код: plaintext 1. str изменяется, а pivot.SourceData[3] нет :/ Идем дальше. Вообщем суть в том. что на любую попытку изменения непосредственно датасорса ексель генерировал ошибку. (тоже поведение обнаружилось при попытке запуска аналогичного макроса под Ексель, который выполняет те же действия). Вообщем, в итоге воспользовавшись такой рульной вещью как запись макросов и пройдя еще через немалое кол-во граблей и всевозможных приколов, у меня наконец получилось накропать работающий вариант для C# (для ASP.NET), который привожу ниже. Кроме всего этого, если вы будете генерить ексельные отчеты, вам наверняка придется использовать след. вещи: - имперсонификация под юзера у которого есть права (немалые) - убийство екселя в памяти - сжатие файла - отправка файла через браузер Все это используется, но что бы не раздувать пост, я не привожу описание самих функций. Если кому надо - запостю отдельно. Код: plaintext 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. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. А вот описания ключей: Код: plaintext 1. Все! Если будут какие вопросы - пишите. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2004, 03:01 |
|
||
|
Для тех кто создает отчеты в Excel и юзает Pivot Table
|
|||
|---|---|---|---|
|
#18+
я чего-то так и не понял - ты вопрос спрашиваешь или сам же себе и ответил? Max Pro ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2004, 22:12 |
|
||
|
|

start [/forum/topic.php?fid=18&tid=1394902]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 407ms |

| 0 / 0 |
