|
|
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Подключаюсь к Excel через 1с. В книге Excel содержится примерно 100 000 ячеек, которые содержат текст "_name_". Мне необходимо найти эти ячейки и для каждой установить определенное значение. Сейчас я делаю это следующим образом, поиск в цикле: Ячейка = Страница.Cells.Find("_name_"); В итоге получается нереально долго и чем дальше мы обходим цикл тем поиск замедляется, по замеру производительности этот небольшой кусок кода составляет 97% всего времени. Подскажите как решить проблему и увеличить скорость поиска? Есть ли у кого-нибудь примеры на "ADO"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 06:03 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Как воспользоваться методом Find в RecordSet? RecordSet = Новый COMОбъект("ADODB.RecordSet"); НайденнаяЯчейка = RecordSet.Find("3364YD-YE"); !!! Ошибка при вызове метода Find, что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 09:17 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
RecordSet.Find просто перемещает указатель рекордсета на нужную строку. На самом деле надо просто попробовать сделать UPDATE для всего файла, открыв его через ADO. Но тут неясно, что такое "установить определенное значение" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 10:39 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProRecordSet.Find просто перемещает указатель рекордсета на нужную строку. На самом деле надо просто попробовать сделать UPDATE для всего файла, открыв его через ADO. Но тут неясно, что такое "установить определенное значение" У меня есть книга excel ячейки которых заполнены текстом типа "_name_a1", "_name_a2",... "_name_an". Сейчас я ищу текст "_name_" и для найденной ячейки устанавливаю имя "a1", "a2",... "an", а текст очищаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 10:58 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Ну тогда, если это возможно по структуре файла, надо выполнить запрос типа Код: sql 1. это будет самый быстрый способ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:05 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
А, стоп, плохо прочитал. То есть именно ИМЯ для ячейки устанавливается? тогда тут через ADO не сделаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:06 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxВ итоге получается нереально долго и чем дальше мы обходим цикл тем поиск замедляется, по замеру производительности этот небольшой кусок кода составляет 97% всего времени.тут может проблема в том, что поиск КАЖДЫЙ раз идет по всему файлу? Может вообще отказаться от поиска, а тупо пройтись циклом по ячейкам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:07 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Думаю, пример файла (строк на 100) никому не повредит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:16 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
В файлике небольшая выборка, которая еще не обработана. Ячейки, например которые содержат текст "_name_" им будет задано имя которое идет после "_name_", а сам текст будет очищен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:27 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Например, ячейка содержащая текст: _name__C_N_4b35a34e.6838.4fe1.92e9.55453a70e97b_C_3d273d36.3331.4dd5.af15.f781f131edd3_V_4e115265.2211.42de.bc59.7d7deec26cde_T_d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 после обработки будет иметь имя: _C_N_4b35a34e.6838.4fe1.92e9.55453a70e97b_C_3d273d36.3331.4dd5.af15.f781f131edd3_V_4e115265.2211.42de.bc59.7d7deec26cde_T_d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 ...а текст у ячейки будет очищен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:28 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxВ файлике небольшая выборка, которая еще не обработаная думаю,ч то если выкинуть поиск из цикла и сделать просто перебор ячеек, будет быстрее. Макроса в файле не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:29 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProZixxxВ файлике небольшая выборка, которая еще не обработаная думаю,ч то если выкинуть поиск из цикла и сделать просто перебор ячеек, будет быстрее. Макроса в файле не нашел Макроса нет в файлике, у меня порядок следующий: 1. 1с формирует табличный документ, заполняет его необходимыми данными 2. Сохраняет табличный документ как книгу xls (1c не умеет сохранять имена ячеек поэтому есть 3 пункт) 3. Открывает его и начинает преобразовывать xls. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:46 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
То есть макрос написан на стороне 1С? Как он его обрабатывает? Через COM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:48 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Я бы попробовал что-то такое Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:53 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProТо есть макрос написан на стороне 1С? Как он его обрабатывает? Через COM? Файл = ПолучитьИмяВременногоФайла(".xls"); ТабличныйДокумент.Записать(Файл, ТипФайлаТабличногоДокумента.XLS); Попытка; Эксель = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось инициализировать Excel, ошибка: " + ОписаниеОшибки() + ""); Возврат; КонецПопытки; РабочаяКнига = Эксель.Workbooks.Open(Файл); Страница = РабочаяКнига.Worksheets(1); Порядок = 0; Пока Истина Цикл Порядок = Порядок + 1; Состояние("Преобразование имен: " + Порядок + ""); Ячейка = Страница.Cells.Find("_name_"); Если Ячейка = Неопределено Тогда Прервать; КонецЕсли; Ячейка.Name = СтрЗаменить(Ячейка.Value, "_name_", ""); Ячейка.Value = ""; КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:53 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Как я и думал - поиск каждый раз идет по всему листу. Либо надо указать дополнительные параметры поиска, чтобы искал от определенной позиции. Либо попробуйте мой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 11:55 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProКак я и думал - поиск каждый раз идет по всему листу. Либо надо указать дополнительные параметры поиска, чтобы искал от определенной позиции. Либо попробуйте мой код. Попробовать обойти все ячейки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 12:03 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxShocker.ProКак я и думал - поиск каждый раз идет по всему листу. Либо надо указать дополнительные параметры поиска, чтобы искал от определенной позиции. Либо попробуйте мой код. Попробовать обойти все ячейки? Зачем все? Только те, где предположительно есть нужные данные. Иначе потратится много лишнего времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 12:04 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, в массиве гораздо быстрее будет. Ведь, изначально, всё дело в скорости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 12:39 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Выделение памяти под массив в сто тыщ строк тоже немало времени и ресурсов займет. В принципе, действительно, если есть возможность, надо вообще не перебирать ячейки, а прямо на стороне 1С работать с коллекцией Names, ведь данные выгружаются из 1С, следовательно там уже есть все данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 12:52 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProВыделение памяти под массив в сто тыщ строк тоже немало времени и ресурсов займет. В принципе, действительно, если есть возможность, надо вообще не перебирать ячейки, а прямо на стороне 1С работать с коллекцией Names, ведь данные выгружаются из 1С, следовательно там уже есть все данные. Согласен, но на выходе из 1с у меня есть *.mxl в нем есть ячейка имя у которой "FFF", максимум что я могу сделать это открыть этот *.mxl в excel, но имя у ячейки будет R2C2. Если же открыть этот файл в 1с то имя для ячейки установлено "FFF". Т.е. оно храниться в файла *.mxl но в excele не интерпретируется. Файлик для примера во вложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 20:54 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxxно на выходе из 1сно это на выходе, а ведь эти данные берутся из 1С, почему бы не брать их непосредственно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 21:17 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProZixxxно на выходе из 1сно это на выходе, а ведь эти данные берутся из 1С, почему бы не брать их непосредственно? Я их и беру непосредственно из 1с и они у меня есть в бланке заказа который сформирован в 1с, далее мне его нужно сохранить. Сохранить я его могу, например в mxl тогда имена останутся, а если я сохраню бланк в xls то имена не сохраняются. Поэтому, еще в момент формирования бланка в 1с, я ячейкам задаю определенный текст, который в дальнейшем мне и нужно перенести в имена ячеек. Если бы 1с могла сохранить сформированный бланк в xls с сохранением имен ячеек, или хотя бы excel умел правильно читать mxl, я был бы просто счастлив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 05:30 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxx, Код: vbnet 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. > В книге Excel содержится примерно 100 000 ячеек, которые содержат текст "_name_". Мне необходимо ... ... еще 80 000 ячеек, которые содержат текст "_formula_" ... ... еще 10 000 ячеек, которые содержат текст "_if_" ... Реализация бредовая, ИМХО. И не спасут никакие замены поиска на перебор и использование массивов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 06:15 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
formul и if очень мало. Если реализация бредовая предложите другой вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 09:21 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxx или хотя бы excel умел правильно читать mxl, я был бы просто счастлив. Не вижу причин не быть счастливым Начиная с 2002, Ограничения xmlss Начиная с 2007, OpenXML (pdf) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 09:44 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Упс, немного перепутал(xml mxl) Но все равно, с xml тоже можно быть счастливым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 09:48 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxЯ их и беру непосредственно из 1с и они у меня есть в бланке заказа который сформирован в 1с, далее мне его нужно сохранить. Сохранить я его могу, например в mxl тогда имена останутся, а если я сохраню бланк в xls то имена не сохраняются. Поэтому, еще в момент формирования бланка в 1с, я ячейкам задаю определенный текст, который в дальнейшем мне и нужно перенести в имена ячеек.Я имел ввиду вот что - сохраняем файл как экселевский - подключаемся к файлу через СОМ - добавляем в коллекцию Names нужные имена без перебора ячеек (данные для этого берем из 1С повторно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 10:08 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxxformul и if очень мало. Если реализация бредовая предложите другой вариант. под спойлер стоит заглянуть при двух "если" -имена ячеек используются исключительно для работоспособности формул в Excel -у Вас есть возможность и желание повлиять на _создание_ отчета убрать из 'формул' префиксы Код: vbnet 1. 2. 3. 4. 5. 6. 7. изменить формулы, содержащие имена Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. не заполнять ячейки именами ВООБЩЕ в таком случае обработка файла станет до смешного простой: Код: vbnet 1. 2. 3. 4. 5. ЗЫ: простите, если эпитет бредовая Вас обидел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 10:30 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxx, для более ясной схемы таблицы __name_ количество по товару_ип_точке_..... _formula_количество * цену или сумма по столбцу _iif_признак группировки по ип у ип или ооо может быть несколько точек №НаименованиеЕд.Ед. местК.Кол. местАБЦенаВысоцкого, 44Невельского, 51СуммаИтого, штук1Бифидо кефир 2,5% 420 г ПЭТштмест10 _formula _=SUM (RC[29] /RC[-1]) 100.00 _name _ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 _name _ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 _formula _=SUM( _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+0)*RC[-3] _formula _=SUM( _C _N _4b35a34e.6838.4fe1 .92e9.55453a70e97b _C _3d273d36.3331.4dd5.af15.f781f131edd3 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _403ab811.54da.43e4.b998.5454fe5a7475 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _3e716fa5.17ee.4d2a.86eb.b2647f34ceb0 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _c9237718.def7.442c.978d.a86c36492149 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _333fec40.63ed.4e93.83cd.3106eb6a7fb7 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _333fec40.63ed.4e93.83cd.3106eb6a7fb7 _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _3ebd32de.8070.47ac.9d60.1918ee055739 _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _4b35a34e.6838.4fe1.92e9.55453a70e97b _C _3ebd32de.8070.47ac.9d60.1918ee055739 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+0)2Бифидо кефир 2,5% 950 г тетра рексштмест10 _formula _=SUM (RC[29] /RC[-1]) 100.00 _name _ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 _name _ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95 _formula _=SUM( _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+0)*RC[-3] _formula _=SUM( _C _N _3737e743.d080.4649 .adb8.1d00b69eef68 _C _3d273d36.3331.4dd5.af15.f781f131edd3 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _191b3bc1.c4d4.42a0.85f4.a8c25aac161a _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _403ab811.54da.43e4.b998.5454fe5a7475 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _3e716fa5.17ee.4d2a.86eb.b2647f34ceb0 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _c9237718.def7.442c.978d.a86c36492149 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _333fec40.63ed.4e93.83cd.3106eb6a7fb7 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _333fec40.63ed.4e93.83cd.3106eb6a7fb7 _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _3ebd32de.8070.47ac.9d60.1918ee055739 _V _b910ecef.9cc8.44e8.b0df.bc705acb83ed _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+ _C _N _3737e743.d080.4649.adb8.1d00b69eef68 _C _3ebd32de.8070.47ac.9d60.1918ee055739 _V _4e115265.2211.42de.bc59.7d7deec26cde _T _d0d43c5c.554d.11e1.b4a5.1c6f65d75e95+0)Итого сумма по группе_if _=IF(RC[1]>0, "+","")_formula _=SUM(R[-10]C[3]:R[-1]C[3])_formula _=SUM(R[-10]C:R[-1]C) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 11:10 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProZixxxЯ их и беру непосредственно из 1с и они у меня есть в бланке заказа который сформирован в 1с, далее мне его нужно сохранить. Сохранить я его могу, например в mxl тогда имена останутся, а если я сохраню бланк в xls то имена не сохраняются. Поэтому, еще в момент формирования бланка в 1с, я ячейкам задаю определенный текст, который в дальнейшем мне и нужно перенести в имена ячеек.Я имел ввиду вот что - сохраняем файл как экселевский - подключаемся к файлу через СОМ - добавляем в коллекцию Names нужные имена без перебора ячеек (данные для этого берем из 1С повторно) Я привязал имена к ячейкам, при загрузки бланка я читаю через com именованные ячейки и беру их значения, на основании имени я понимаю какая это номенклатура, какой адрес, какой контрагент и какой тип цен. Поэтому просто перенести туда имена для меня не имеет смысла я их связываю с определенными ячейками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 11:35 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxЯ привязал yимена к ячейкам, при загрузки бланка я читаю через com именованные ячейки и беру их значения, на основании имени я понимаю какая это номенклатура, какой адрес, какой контрагент и какой тип цен. Поэтому просто перенести туда имена для меня не имеет смысла я их связываю с определенными ячейками - из 1С выгружаете в .xls; - "доводите до ума" файл .xls; - отдаете пользователю; - заполненный пользователем файл "импортируете" в 1С. Правильно понял схему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 11:41 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
ZixxxПоэтому просто перенести туда имена для меня не имеет смысла я их связываю с определенными ячейками.А я разве говорил, что их не надо связывать? Вы, видимо, не посмотрели пример ElenHim 12507044 - я предлагаю использовать эту схему, только не на стороне экселя, а на стороне SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 11:59 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProZixxxПоэтому просто перенести туда имена для меня не имеет смысла я их связываю с определенными ячейками.А я разве говорил, что их не надо связывать? Вы, видимо, не посмотрели пример ElenHim 12507044 - я предлагаю использовать эту схему, только не на стороне экселя, а на стороне SQL Может я что-то не так понял из-за незнакомой мне терминологии, но у меня на стороне sql все нормально, у меня mxl заполнен именованными ячейками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:08 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Ой, я сказал SQL, имея ввиду 1С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:24 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Не вполне понятна конечная цель... Чтоб потом подставить это имя в формулу? Как вариант для разработки - просматриваем диапазон, запоминаем адреса всех таких ячеек в словаре (ну и корректируем значение этих ячеек) Затем снова просматриваем диапазон, и во всех формулах заменяем такие имена на их адреса (достаём из словаря). сразу преобразуем текст в формулу. И побыстрее будет, и объём файла можно в несколько раз уменьшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:26 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Shocker.ProОй, я сказал SQL, имея ввиду 1С. На стороне 1с все есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:51 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Hugo121Не вполне понятна конечная цель... Чтоб потом подставить это имя в формулу? Как вариант для разработки - просматриваем диапазон, запоминаем адреса всех таких ячеек в словаре (ну и корректируем значение этих ячеек) Затем снова просматриваем диапазон, и во всех формулах заменяем такие имена на их адреса (достаём из словаря). сразу преобразуем текст в формулу. И побыстрее будет, и объём файла можно в несколько раз уменьшить. Конечная цель - получить из excel ссылки на контрагента, номенклатуру, тип цен, и адрес доставки из одной ячейки в которой будет значение. С этим проблем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:52 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Что-то тема куда-то в лес уходит. Изначальная проблема была в том, что код отрабатывал медленно. Были предложены решения, которые отрабатывают быстрее. При таких форматах и условиях это - лучшее, что может быть сделано. Дальнейшая оптимизация потребует изменение форматов, логики и, возможно, много чего ещё. Только это уже совсем другая история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 13:28 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> ElenHim > Что-то тема куда-то в лес уходит. > Изначальная проблема была в том, что код отрабатывал медленно. А поговорить?... полуофф (тест) Код: vbnet 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 14:25 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Я думаю, что затея с именами изначально неверная - слишком много накладных расходов. Писать все эти значения, потом их обрабатывать, заменять... Неужели нет другого пути - сразу где-то на стороне 1С это проделывать? (правда я 1С не видел...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 15:19 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
на стороне 1с видимо --вводятся данные --формируется дикий отчет а что делается на стороне екселя для просмотра сводными таблицами такой монстр не нужен достаточно получить текстовик через табулятор для открытия екселем --фирма --адрес --товар --тип цены --цена --количество и настроить на него сводную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:00 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> Hugo121 > Неужели нет другого пути - сразу где-то на стороне 1С это проделывать? (правда я 1С не видел...) Приоткрыть завесу тайны может только ТС, но он, видимо, потерял интерес к данной теме... Камрады, кому так же скучно, как мне, запустите, плз, у себя тест 12513716 и отпишитесь о результатах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:02 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> ПЕНСИОНЕРКА > ... > а что делается на стороне екселя Набиваются данные. После чего эта вся красотень импортируется обратно в 1С. Чтобы упростить/сделать вообще возможным этот импорт ТС так извращается. ЗЫ: это всё мои досужие вымыслы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:05 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
скукотищаА поговорить?... Обо что тут гутарить? скукотищаКамрады, кому так же скучно, как мне, запустите, плз, у себя тест 12513716 и отпишитесь о результатах. Чтот мне этот ваш код не очень нравится, поэтому предлагаю свой Код: vbnet 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. Мои результаты (E7300, 2ГБ ОЗУ,Excel 2010, в файле *.xls) Names.Count: 0 05.05.2012 16:27:57 05.05.2012 16:30:19 Names.Count: 100000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:40 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> ElenHim > Чтот мне этот ваш код не очень нравится, поэтому предлагаю свой Не нравтся, так не нравтся. Насильно мил не будешь. (ASUS X51L, Intel T2370@1.73GHz, RAM 2GB, Excel 2003 SP1) Время работы ~5 минут, ошибка та же, что и с моим кодом. Имён добавляет на одно больше )) ЗЫ: Памяти потребляет при этом ~ на 60% больше, чем мой код ( 58 KB против 35) . ЗЗЫ: спасибо, что уделили мне внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 17:13 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
скукотища> Hugo121 > Неужели нет другого пути - сразу где-то на стороне 1С это проделывать? (правда я 1С не видел...) Приоткрыть завесу тайны может только ТС, но он, видимо, потерял интерес к данной теме... Нет, интерес не пропал. Я просто уже писал почему так пришлось делать. Одна из причин это то что ячейка должна хранить больше данных чем позволило бы определить по колонке и строке, во вторых скорость разбора с именами у меня очень быстрая. Также я говорил что 1с на своей стороне все делает, она создает файл с именами так как мне и нужно, по при сохранении в xls платформа их не переносит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 05:26 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
Zixxx, я до сих пор так и не понял, зачем выгружать в Excel а потом обратно тянуть, если можно(?) всё делать в 1С. А с экселем можно попробовать не писать имена в ячейки таблицы, а сохранить пары Name-RefersToR1C1 в таблице значений и при обработке xls-файла добавить имена, используя эту таблицу значений. ЗЫ: в экселе у объекта Name есть свойство Visible. Влияет на отображение в пользовательском интерфейсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 07:03 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
скукотищаZixxx, я до сих пор так и не понял, зачем выгружать в Excel а потом обратно тянуть, если можно(?) всё делать в 1С. А с экселем можно попробовать не писать имена в ячейки таблицы, а сохранить пары Name-RefersToR1C1 в таблице значений и при обработке xls-файла добавить имена, используя эту таблицу значений. ЗЫ: в экселе у объекта Name есть свойство Visible. Влияет на отображение в пользовательском интерфейсе. Почему промежуточное звено excel, это связано с некоторыми особенностями, удаленных не автоматизированных рабочих точек. При обработке мне так и так придется определить какой ячейки что писать. В момент формирования табличного документа в 1с, у меня адрес ячейки всегда R1C1. Соответственно, я не смогу определить и где-то запомнить имена ячеек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 07:26 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> Zixxx > Соответственно, я не смогу определить и где-то запомнить имена ячеек Да запросто. Настроенные секции есть, размеры (высота, ширина) известны. Вычислить адрес той или иной ячейки - как два байта переслать. Но это уже оффтоп в данной ветке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 07:34 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
скукотища> Zixxx > Соответственно, я не смогу определить и где-то запомнить имена ячеек Да запросто. Настроенные секции есть, размеры (высота, ширина) известны. Вычислить адрес той или иной ячейки - как два байта переслать. Но это уже оффтоп в данной ветке. Секции только именованные, придется считать что когда выводится и жестко задавать в коде сколько в секции строк, также если секции объединяются, порядок нужно отнимать, количество это будет знать в конце цикла - запустим еще один. Все это весьма геморойно и сгодится только для говнокода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 08:09 |
|
||
|
Excel. Cells.Find...
|
|||
|---|---|---|---|
|
#18+
> Zixxx > Все это весьма геморойно и сгодится только для говнокода. Альтернатива - неприемлимое время выполнения замен значений в ячейках на имена. Решать Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 08:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2175733]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
437ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 760ms |

| 0 / 0 |
