Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Расчет суммы с данными из другого файла - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Расчет суммы с данными из другого файла
ALARMus Дата: Среда, 22.08.2012, 10:49 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Новая задачка.
Есть файл №1 содержит итоговый лист "Расчет" и рабочий лист в котором список номеров телефонов и соответствующий им код.
Есть файл №2 содержит номера телефонов и сумму расхода по каждому из них.

В файле №1 надо на листе "Расчет" вывести сумму расходов по каждому из кодов на выбранный отчетный период.
Файл №2 будет именоваться в соответствии с периодом (2012aug или 2012август, для форума приаттачил на английском)

\Изначально файл №2 вообще HTML, если можно брать прям его было бы еще лучше. Тот что я выложил это открытый в Excel html файл и сохраненный как xlsx и вырезано все лишнее\
К сообщению приложен файл: Phone_code_001.xlsx (13.6 Kb) · 2012aug.xlsx (14.2 Kb)


Сообщение отредактировал ALARMus - Среда, 22.08.2012, 10:51
 
Ответить
СообщениеНовая задачка.
Есть файл №1 содержит итоговый лист "Расчет" и рабочий лист в котором список номеров телефонов и соответствующий им код.
Есть файл №2 содержит номера телефонов и сумму расхода по каждому из них.

В файле №1 надо на листе "Расчет" вывести сумму расходов по каждому из кодов на выбранный отчетный период.
Файл №2 будет именоваться в соответствии с периодом (2012aug или 2012август, для форума приаттачил на английском)

\Изначально файл №2 вообще HTML, если можно брать прям его было бы еще лучше. Тот что я выложил это открытый в Excel html файл и сохраненный как xlsx и вырезано все лишнее\

Автор - ALARMus
Дата добавления - 22.08.2012 в 10:49
ALARMus Дата: Среда, 22.08.2012, 11:14 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

с этим сложнее - там "лишние" (конфиденциальные) данные и сам файлик размером 161Mb
(я постараюсь, что-нибудь сделать)
 
Ответить
Сообщениес этим сложнее - там "лишние" (конфиденциальные) данные и сам файлик размером 161Mb
(я постараюсь, что-нибудь сделать)

Автор - ALARMus
Дата добавления - 22.08.2012 в 11:14
ALARMus Дата: Среда, 22.08.2012, 11:18 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

у меня 2010 офис

Касательно замены инфы, над этим я и поработаю (закажу не полный список, а столько сколько я тут наэмулировал - 24 номера и уже в каком-нибудь редакторе исправлю номера и прочее)

Тот приложенный файл 2012aug.xlsx - этот как раз кусок того html - как его открыл 2010 excel


Сообщение отредактировал ALARMus - Среда, 22.08.2012, 11:19
 
Ответить
Сообщениеу меня 2010 офис

Касательно замены инфы, над этим я и поработаю (закажу не полный список, а столько сколько я тут наэмулировал - 24 номера и уже в каком-нибудь редакторе исправлю номера и прочее)

Тот приложенный файл 2012aug.xlsx - этот как раз кусок того html - как его открыл 2010 excel

Автор - ALARMus
Дата добавления - 22.08.2012 в 11:18
Hugo Дата: Среда, 22.08.2012, 11:26 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3710
Репутация: 794 ±
Замечаний: 0% ±

365
Непонятно с "Период можно выбирать" - выбирать из чего? Как это связать с файлами html?
Похоже, что данные можно брать прямо из html, используя алгоритм как в UDFках по извлечению курсов валют со страниц банков.
Но нужно конечно видеть файл.
Т.е. в тексте страницы ищем номер телефона, далее находим "Итого по телефону:", правее берём сумму.
Эти данные извлекаем на лист "Список", а уже с него формулой СУММЕСЛИ() суммируем по региону на лист "Расход" (вопрос - почему там нет кодов? Нужно занести.).

Я бы делал примерно так.

P.S. Прочитал про 161 мб - это уже серьёзнее, нужно подумать... Читать сразу весь файл вероятно не стОит - я бы вероятно читал построчно пока не найдётся нужный номер, затем ещё пару строк до данных. И всё.
Или один раз прочитать всё, собрать нужную инфу в словарь, использовать.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНепонятно с "Период можно выбирать" - выбирать из чего? Как это связать с файлами html?
Похоже, что данные можно брать прямо из html, используя алгоритм как в UDFках по извлечению курсов валют со страниц банков.
Но нужно конечно видеть файл.
Т.е. в тексте страницы ищем номер телефона, далее находим "Итого по телефону:", правее берём сумму.
Эти данные извлекаем на лист "Список", а уже с него формулой СУММЕСЛИ() суммируем по региону на лист "Расход" (вопрос - почему там нет кодов? Нужно занести.).

Я бы делал примерно так.

P.S. Прочитал про 161 мб - это уже серьёзнее, нужно подумать... Читать сразу весь файл вероятно не стОит - я бы вероятно читал построчно пока не найдётся нужный номер, затем ещё пару строк до данных. И всё.
Или один раз прочитать всё, собрать нужную инфу в словарь, использовать.

Автор - Hugo
Дата добавления - 22.08.2012 в 11:26
ALARMus Дата: Среда, 22.08.2012, 11:32 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (Hugo)
ыбирать из чего?

Да стандартно, например заводим новый лист, в котором в строку перечислены периоды в формате: 2012август, 2012сентябрь,....
На Листе расчета выбираешь из этого списка и имена html файлов как раз так и должны называться и находиться в той же папке где и файл расчета.

Почему нет кодов. Просто не определился как лучше - взять весь список кодов и вынести его как есть на расчетный лист или этот список будет попадать туда только по тем которые имеют не нулевую сумму. (скорее первое)

Quote (Hugo)
Прочитал про 161 мб - это уже серьёзнее

161Мб это в виде HTML.
Опять же задача на ходу формулируется и уточняется. Не знаю может выгоднее (по времени и трудозатратам) открывать этот html в excel и сохранять уже в xlsx и работать далее с ним.
в excel открывался 7 минут (в формате xlsx размер 61Мб)


Сообщение отредактировал ALARMus - Среда, 22.08.2012, 11:47
 
Ответить
Сообщение
Quote (Hugo)
ыбирать из чего?

Да стандартно, например заводим новый лист, в котором в строку перечислены периоды в формате: 2012август, 2012сентябрь,....
На Листе расчета выбираешь из этого списка и имена html файлов как раз так и должны называться и находиться в той же папке где и файл расчета.

Почему нет кодов. Просто не определился как лучше - взять весь список кодов и вынести его как есть на расчетный лист или этот список будет попадать туда только по тем которые имеют не нулевую сумму. (скорее первое)

Quote (Hugo)
Прочитал про 161 мб - это уже серьёзнее

161Мб это в виде HTML.
Опять же задача на ходу формулируется и уточняется. Не знаю может выгоднее (по времени и трудозатратам) открывать этот html в excel и сохранять уже в xlsx и работать далее с ним.
в excel открывался 7 минут (в формате xlsx размер 61Мб)

Автор - ALARMus
Дата добавления - 22.08.2012 в 11:32
Hugo Дата: Среда, 22.08.2012, 11:55 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3710
Репутация: 794 ±
Замечаний: 0% ±

365
Ну думаю читать html как текст будет быстрее 7-ми минут (там ведь ещё и парсинг не мало времени занял), но т.к. объём не маленький, то не стОит читать его больше одного раза.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНу думаю читать html как текст будет быстрее 7-ми минут (там ведь ещё и парсинг не мало времени занял), но т.к. объём не маленький, то не стОит читать его больше одного раза.

Автор - Hugo
Дата добавления - 22.08.2012 в 11:55
Gustav Дата: Среда, 22.08.2012, 12:41 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2816
Репутация: 1187 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Пока идут раздумья откуда что читать, я немного в свою АДОшную дуду подую.

В запас набросал макрос для подготовки рафинированных данных на втором листе файла 2012aug.xlsx
[vba]
Code

Sub prepareData()
          
     'Перед запуском в редакторе VB в меню Tools\References установить ссылку (включить галку)
     'на библиотеку "Microsoft ActiveX Data Objects ... Library", где ... - номер версии.
     'Можно выбрать любой максимальный (6.0, 2.8, 2.5...) из того, что установлено на компьютере.
      
     Dim rst As New ADODB.Recordset
          
     [Лист1].Activate
          
     With Columns("B:B")
         .WrapText = False
         .MergeCells = False
         On Error Resume Next
         .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
         On Error GoTo 0
         .CurrentRegion.Offset(0, 1).Resize(, 3).Name = "MyRange"
     End With
                  
     rst.Open _
     "SELECT F1, F3 FROM MyRange WHERE F2 = 'Итого по телефону:'" _
     , _
     "Provider=Microsoft.ACE.OLEDB.12.0;" & _
     "Data Source=" & ThisWorkbook.FullName & ";" & _
     "Extended Properties='Excel 12.0;HDR=No'"
                 
     [Лист2!A1].CopyFromRecordset rst
          
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПока идут раздумья откуда что читать, я немного в свою АДОшную дуду подую.

В запас набросал макрос для подготовки рафинированных данных на втором листе файла 2012aug.xlsx
[vba]
Code

Sub prepareData()
          
     'Перед запуском в редакторе VB в меню Tools\References установить ссылку (включить галку)
     'на библиотеку "Microsoft ActiveX Data Objects ... Library", где ... - номер версии.
     'Можно выбрать любой максимальный (6.0, 2.8, 2.5...) из того, что установлено на компьютере.
      
     Dim rst As New ADODB.Recordset
          
     [Лист1].Activate
          
     With Columns("B:B")
         .WrapText = False
         .MergeCells = False
         On Error Resume Next
         .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
         On Error GoTo 0
         .CurrentRegion.Offset(0, 1).Resize(, 3).Name = "MyRange"
     End With
                  
     rst.Open _
     "SELECT F1, F3 FROM MyRange WHERE F2 = 'Итого по телефону:'" _
     , _
     "Provider=Microsoft.ACE.OLEDB.12.0;" & _
     "Data Source=" & ThisWorkbook.FullName & ";" & _
     "Extended Properties='Excel 12.0;HDR=No'"
                 
     [Лист2!A1].CopyFromRecordset rst
          
End Sub
[/vba]

Автор - Gustav
Дата добавления - 22.08.2012 в 12:41
ALARMus Дата: Среда, 22.08.2012, 17:03 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Вот обработал (только в Excel удалось - все остальное не справлялось с открытием файла)

Сохранил в XLSX и в HTML (из Excel)
К сообщению приложен файл: 2012aug_01.xlsx (16.1 Kb) · html_01.zip (9.1 Kb)


Сообщение отредактировал ALARMus - Среда, 22.08.2012, 17:05
 
Ответить
СообщениеВот обработал (только в Excel удалось - все остальное не справлялось с открытием файла)

Сохранил в XLSX и в HTML (из Excel)

Автор - ALARMus
Дата добавления - 22.08.2012 в 17:03
Hugo Дата: Среда, 22.08.2012, 17:59 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3710
Репутация: 794 ±
Замечаний: 0% ±

365
Нет, такой html не годится, нужен кусок (с начала) оригинального файла.
Можно его попробовать разбить в ТоталКомандере на куски по 50к и прервать, как будет пару кусков готово (чтоб всего монстра не резать).


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНет, такой html не годится, нужен кусок (с начала) оригинального файла.
Можно его попробовать разбить в ТоталКомандере на куски по 50к и прервать, как будет пару кусков готово (чтоб всего монстра не резать).

Автор - Hugo
Дата добавления - 22.08.2012 в 17:59
ALARMus Дата: Четверг, 23.08.2012, 12:10 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Вот что удалось наколдовать.
Не знаю насколько остался оригинал - в редакторе убрал все телефоны и оставил список из 25.

(как колдовал: открыл в блокноте, скопировал все и вставил в FronPage (во вкладке КОД), заменил\удалил, скопировал код, вставил в блокноте и сохранил)
К сообщению приложен файл: 2012_aug_004UTF.zip (8.9 Kb)


Сообщение отредактировал ALARMus - Четверг, 23.08.2012, 12:12
 
Ответить
СообщениеВот что удалось наколдовать.
Не знаю насколько остался оригинал - в редакторе убрал все телефоны и оставил список из 25.

(как колдовал: открыл в блокноте, скопировал все и вставил в FronPage (во вкладке КОД), заменил\удалил, скопировал код, вставил в блокноте и сохранил)

Автор - ALARMus
Дата добавления - 23.08.2012 в 12:10
Hugo Дата: Четверг, 23.08.2012, 13:04 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3710
Репутация: 794 ±
Замечаний: 0% ±

365
Для начала проверьте на своём оригинальном файле (на изменённом работает):

[vba]
Code
Sub readhtml()

     Dim oD As Object, cc As Range, cnt&

     Set oD = CreateObject("scripting.dictionary")

     For Each cc In Sheets("Список").[c3:c27].Cells
         oD.Item(Trim(cc.Value)) = 0
     Next
     cnt = oD.Count

     strFilePath = "D:\TMP\3\4\2012_aug_004UTF8.html"

     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set objTS = objFSO.OpenTextFile(strFilePath, 1)

     Do Until objTS.AtEndOfStream    'пока не кончился файл
         strNextLine = objTS.Readline    'читаем посторочно
         If InStr(strNextLine, "Абонентский номер</td><td") Then
             t = Mid(strNextLine, InStr(strNextLine, "left") + 6, 11)
             For ii = 1 To 6: objTS.SkipLine: Next
             If oD.exists(t) Then
                 oD.Item(t) = Val(Replace(objTS.Readline, ",", "."))
                 cnt = cnt - 1
                 If cnt = 0 Then Exit Do
             End If
         End If
     Loop

     Set objFSO = Nothing
     Set objTS = Nothing
     strNextLine = Empty

     For Each cc In Sheets("Список").[c3:c27].Cells
         cc.Offset(, 1) = oD.Item(Trim(cc.Value))
     Next

End Sub
[/vba]

Вот именно так с каракулями - не стал пытаться перекодировать, да и это время занимает.
Путь естественно поменяйте на свой, в листе "Список" нужно отобразить скрытый столбец D - туда должны вытянуться суммы.

Попутно с чтением файла считатаю количество вытянутых сумм. Как только оно равно количеству искомых номеров - можно прекращать читать файл. Возможно так сильно сократится время чтения файла.

Если всё сработает - то в общем уже и готово, на первый лист данные можно вытянуть формулами, если поместить туда список кодов.
Ну а так можно потом подшлифовать по поводу динамических диапазонов, имени файла html, индикации работы...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДля начала проверьте на своём оригинальном файле (на изменённом работает):

[vba]
Code
Sub readhtml()

     Dim oD As Object, cc As Range, cnt&

     Set oD = CreateObject("scripting.dictionary")

     For Each cc In Sheets("Список").[c3:c27].Cells
         oD.Item(Trim(cc.Value)) = 0
     Next
     cnt = oD.Count

     strFilePath = "D:\TMP\3\4\2012_aug_004UTF8.html"

     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set objTS = objFSO.OpenTextFile(strFilePath, 1)

     Do Until objTS.AtEndOfStream    'пока не кончился файл
         strNextLine = objTS.Readline    'читаем посторочно
         If InStr(strNextLine, "Абонентский номер</td><td") Then
             t = Mid(strNextLine, InStr(strNextLine, "left") + 6, 11)
             For ii = 1 To 6: objTS.SkipLine: Next
             If oD.exists(t) Then
                 oD.Item(t) = Val(Replace(objTS.Readline, ",", "."))
                 cnt = cnt - 1
                 If cnt = 0 Then Exit Do
             End If
         End If
     Loop

     Set objFSO = Nothing
     Set objTS = Nothing
     strNextLine = Empty

     For Each cc In Sheets("Список").[c3:c27].Cells
         cc.Offset(, 1) = oD.Item(Trim(cc.Value))
     Next

End Sub
[/vba]

Вот именно так с каракулями - не стал пытаться перекодировать, да и это время занимает.
Путь естественно поменяйте на свой, в листе "Список" нужно отобразить скрытый столбец D - туда должны вытянуться суммы.

Попутно с чтением файла считатаю количество вытянутых сумм. Как только оно равно количеству искомых номеров - можно прекращать читать файл. Возможно так сильно сократится время чтения файла.

Если всё сработает - то в общем уже и готово, на первый лист данные можно вытянуть формулами, если поместить туда список кодов.
Ну а так можно потом подшлифовать по поводу динамических диапазонов, имени файла html, индикации работы...

Автор - Hugo
Дата добавления - 23.08.2012 в 13:04
ALARMus Дата: Суббота, 25.08.2012, 14:41 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Неожиданно настал мой отпуск - вернусь продолжим smile
 
Ответить
СообщениеНеожиданно настал мой отпуск - вернусь продолжим smile

Автор - ALARMus
Дата добавления - 25.08.2012 в 14:41
ALARMus Дата: Понедельник, 17.09.2012, 18:52 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

окончательно дорешено тут - http://www.excelworld.ru/forum/2-2372-2#26344
 
Ответить
Сообщениеокончательно дорешено тут - http://www.excelworld.ru/forum/2-2372-2#26344

Автор - ALARMus
Дата добавления - 17.09.2012 в 18:52
Hugo Дата: Понедельник, 17.09.2012, 20:46 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3710
Репутация: 794 ±
Замечаний: 0% ±

365
Хотя я уже совсем забыл суть вопроса - но та тема кажется с этой совершенно ничего общего не имеет.
Или Вы решили 161 мб формулами анализировать?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеХотя я уже совсем забыл суть вопроса - но та тема кажется с этой совершенно ничего общего не имеет.
Или Вы решили 161 мб формулами анализировать?

Автор - Hugo
Дата добавления - 17.09.2012 в 20:46
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!