Страницы: 1 2 След.
RSS
при запуске xls-файла автоматом загрузить данные из csv-файла
 
Добрый день!  
Подскажите, как при открытии xls-файла сделать, чтобы он в заданный диапазон загружал данные из csv-файла, который лежит в этой же папке.  
Диапазон предварительно надо будет очищать.  
Заранее спасибо за любые идеи.
 
Записать рекордером макрос открытия этого csv и вызывать его на событие открытия книги. Впрочем, НЕРВУ более доходчиво может объяснить только nerv.
 
записал, получилось следующее:  
 
   With Selection.QueryTable  
       .Connection = "TEXT;C:\ATS\MS.Office.2003.Portable.micro\Master.csv"  
       .TextFilePlatform = 1251  
       .TextFileStartRow = 1  
       .TextFileParseType = xlDelimited  
       .TextFileTextQualifier = xlTextQualifierDoubleQuote  
       .TextFileConsecutiveDelimiter = False  
       .TextFileTabDelimiter = False  
       .TextFileSemicolonDelimiter = False  
       .TextFileCommaDelimiter = True  
       .TextFileSpaceDelimiter = False  
       .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)  
       .TextFileTrailingMinusNumbers = True  
       .Refresh BackgroundQuery:=False  
   End With  
 
но при запуске макроса он открывает окно "Импорт текстового файла", в котором уже проставлен путь и название файла - "Master.csv". Чтобы открыть файл, требуется нажать кнопку "Импорт" в этом окне. Можно ли избавиться от этого?  
К тому же, файл xls и csv не жестко лежат по абсолютному пути, надо, чтобы если их перенести в другой каталог, он также открывался (отнсительные пути, а не абсолютные)
 
1. Насколько помню, обновление из внешних данных можно настроить на автоматическое при открытии файла.  
2. Если обновлять макросом, то путь можно загнать в переменную и подставлять переменную.
 
{quote}{login=Hugo}{date=08.10.2011 07:31}{thema=}{post}1. Насколько помню, обновление из внешних данных можно настроить на автоматическое при открытии файла.  
2. Если обновлять макросом, то путь можно загнать в переменную и подставлять переменную.{/post}{/quote}  
Первый вариант предпочтительнее. Путь желательно вообще не прописывать, а брать csv оттуда же, где лежит сам xls - файл. А как настроить автоматически? дайте ссылку.
 
Да какая ссылка? Идёте в свойства подключения к данным и там ставите галки - обновлять при открытии, не спрашивать имя файла, обновлять каждые n минут...
 
{quote}{login=Hugo}{date=08.10.2011 07:46}{thema=}{post}Да какая ссылка? Идёте в свойства подключения к данным и там ставите галки - обновлять при открытии, не спрашивать имя файла, обновлять каждые n минут...{/post}{/quote}  
спасибо, получилось. имя файла не запрашивает, однако при откытии файла выводит окно (см. скрин) его можно не выводить?
 
Точно не знаю, т.к. не пользуюсь, но возможно это можно убрать, снизив уровень безопасности.  
У меня он стоит на минимуме, и таких запросов нет - сейчас для теста сделал такой файл.
 
{quote}{login=Hugo}{date=08.10.2011 08:01}{thema=}{post}Точно не знаю, т.к. не пользуюсь, но возможно это можно убрать, снизив уровень безопасности.  
У меня он стоит на минимуме, и таких запросов нет - сейчас для теста сделал такой файл.{/post}{/quote}  
Безопасность макросов / Уровень безопасности - Низкая.  
так и стоит, окно все равно выводится...
 
и потом, при таком решении он жестко хранит путь к csv-файлу. Надо, чтобы он искал csv из той же папки, где находится xls-файл, а не жестко помнил путь
 
http://support.microsoft.com/kb/248204/  
 
Примечание. Флажок Включить обновление для всех книг и не выводить это предупреждение в дальнейшем доступен только в Microsoft Excel 2000. В более поздних версиях Microsoft Excel необходимо вручную создавать и настраивать раздел реестра, описанный в разделе "Использование для настройки Excel раздела реестра QuerySecurity".
 
.Connection = thisworkbook.path & "\Master.csv"
Я сам - дурнее всякого примера! ...
 
В модуль книги (можно ещё указать, какой конкретно лист имеется ввиду, я просто чуть исправил записанное рекордером, добавил " & ThisWorkbook.Path & "):  
 
Private Sub Workbook_Open()  
   With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & "\Книга1.csv", _  
       Destination:=Range("$A$1"))  
       .Name = "Книга1"  
       .FieldNames = True  
       .RowNumbers = False  
       .FillAdjacentFormulas = False  
       .PreserveFormatting = True  
       .RefreshOnFileOpen = False  
       .RefreshStyle = xlInsertDeleteCells  
       .SavePassword = False  
       .SaveData = True  
       .AdjustColumnWidth = True  
       .RefreshPeriod = 0  
       .TextFilePromptOnRefresh = False  
       .TextFilePlatform = 866  
       .TextFileStartRow = 1  
       .TextFileParseType = xlDelimited  
       .TextFileTextQualifier = xlTextQualifierDoubleQuote  
       .TextFileConsecutiveDelimiter = False  
       .TextFileTabDelimiter = True  
       .TextFileSemicolonDelimiter = True  
       .TextFileCommaDelimiter = False  
       .TextFileSpaceDelimiter = False  
       .TextFileColumnDataTypes = Array(2, 2)  
       .TextFileTrailingMinusNumbers = True  
       .Refresh BackgroundQuery:=False  
   End With  
End Sub  
 
И некаких предупреждений - точно, у меня тоже вылазят.
 
нИкаких... прилипчивая зараза...
 
Я не пойму, почему просто не открыть, как текстовый:  
Sub www()  
   ChDir "H:\"  
   Workbooks.OpenText Filename:="H:\1.csv", Origin:=1251, StartRow:=1, _  
       DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _  
       :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _  
       Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 1)), _  
       TrailingMinusNumbers:=True  
End Sub  
У меня 2003 - никаких предупреждений.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=08.10.2011 08:51}{thema=}{post}Я не пойму, почему просто не открыть, как текстовый{/post}{/quote}Я тоже не пойму. С 16:08 не понимаю.
 
{quote}{login=Юрий М}{date=08.10.2011 08:55}{thema=Re: }{post}{quote}{login=KukLP}{date=08.10.2011 08:51}{thema=}{post}Я не пойму, почему просто не открыть, как текстовый{/post}{/quote}Я тоже не пойму. С 16:08 не понимаю.{/post}{/quote}да кто этих нервов разберёт : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Игорь, твой макрос у меня тоже без предупреждений работает.
Я сам - дурнее всякого примера! ...
 
А какая по сути разница? Формат колонок можно в обоих вариантах задать...  
Ещё есть вариант считать тест в массив, сразу его проанализировать, обработать, выгрузить на лист результат.  
Вот зачем Вы этот csv открываете?
 
{quote}{login=Hugo}{date=08.10.2011 09:05}{thema=}{post}  
Вот зачем Вы этот csv открываете?{/post}{/quote}Игорь, это кому вопрос? А насчет массива... Ну зачем все усложнять? Надо просто открыть, чтоб не гавкало, зачем тут массив?
Я сам - дурнее всякого примера! ...
 
{quote}{login=Hugo}{date=08.10.2011 08:39}{thema=}{post}В модуль книги (можно ещё указать, какой конкретно лист имеется ввиду, я просто чуть исправил записанное рекордером, добавил " & ThisWorkbook.Path & "):  
 
Private Sub Workbook_Open()  
   With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & "\Книга1.csv", _  
       Destination:=Range("$A$1"))  
       .Name = "Книга1"  
       .FieldNames = True  
       .RowNumbers = False  
       .FillAdjacentFormulas = False  
       .PreserveFormatting = True  
       .RefreshOnFileOpen = False  
       .RefreshStyle = xlInsertDeleteCells  
       .SavePassword = False  
       .SaveData = True  
       .AdjustColumnWidth = True  
       .RefreshPeriod = 0  
       .TextFilePromptOnRefresh = False  
       .TextFilePlatform = 866  
       .TextFileStartRow = 1  
       .TextFileParseType = xlDelimited  
       .TextFileTextQualifier = xlTextQualifierDoubleQuote  
       .TextFileConsecutiveDelimiter = False  
       .TextFileTabDelimiter = True  
       .TextFileSemicolonDelimiter = True  
       .TextFileCommaDelimiter = False  
       .TextFileSpaceDelimiter = False  
       .TextFileColumnDataTypes = Array(2, 2)  
       .TextFileTrailingMinusNumbers = True  
       .Refresh BackgroundQuery:=False  
   End With  
End Sub  
 
И некаких предупреждений - точно, у меня тоже вылазят.{/post}{/quote}  
Спасибо, очень помогло. Только вот не понял одно: вставил код на кнопку.  
При первом нажатии все ok, встает начиная с A1, у при втором нажатии уже встает правее, скажем M1 и так далее при каждом нажитии движется вправо.
 
можно и в массив загонять, потом анализировать всяко надо. Только вот как в массивы загонять при открытии из csv? у меня в csv 18 полей.
 
Вы же писали:"Подскажите, как при открытии xls-файла сделать". Почему на кнопку?  
Вставьте в модуль книги.  
и первой строкой сделайте:  
[a1].currentregion.clear
Я сам - дурнее всякого примера! ...
 
HEPB, тут народ интересуется - почему сразу не открыть текстом?
 
И еще. Почему Вы не так(см.скрин) открываете?
Я сам - дурнее всякого примера! ...
 
Юра опередил:-)
Я сам - дурнее всякого примера! ...
 
Как загонять в массив - уже устал примеры искать/писать/показывать...  
Поищите по форумам по readall.  
Смысл такой - открываем весь текст кодом сразу в переменную, разбиваем в массив по концам строк.  
Потом перебираем этот массив, каждую строку разбивая по разделителям на поля.  
В принципе, если известно (а обычно известно) количество столбцов, то можно создать привычный массив  - когда уже известно и количество строк, то создаём пустой массив под размер, потом перебором первого массива наполняем этот созданный данными.  
Далее его можно выгрузить одним махом на лист, или анализировать перебором.  
Хотя я так практически никогда не делал - всегда хватает массива из строк, далее за один проход по массиву анализировал строки, получал результат.
 
{quote}{login=KukLP}{date=08.10.2011 09:21}{thema=}{post}Вы же писали:"Подскажите, как при открытии xls-файла сделать". Почему на кнопку?  
Вставьте в модуль книги.  
и первой строкой сделайте:  
[a1].currentregion.clear{/post}{/quote}
это понятно. просто интересно, почему по кнопке каждый раз сдвигается. и как это можно поправить
 
Я показал, как поправить: [a1].currentregion.clear
Но Вы не ответили на вопрос - почему так отккрываете.
Я сам - дурнее всякого примера! ...
 
{quote}{login=HEPB}{date=08.10.2011 09:49}{thema=Re: }{post}{quote}{login=KukLP}{date=08.10.2011 09:21}{thema=}{post}Вы же писали:"Подскажите, как при открытии xls-файла сделать". Почему на кнопку?  
Вставьте в модуль книги.  
и первой строкой сделайте:  
[a1].currentregion.clear{/post}{/quote}
это понятно. просто интересно, почему по кнопке каждый раз сдвигается. и как это можно поправить{/post}{/quote}  
это по тому что вы не удаляете соединение с файлом, а создаете новое.  
так за старым соединением закреплен диапазон выгрузки(получается что он занят), то новое соединение выгружает рядышком в незанятую область.  
попробуйте так  
.................  
.Refresh BackgroundQuery:=False  
.delete
Спасибо
Страницы: 1 2 След.
Читают тему
Наверх