Страницы: 1
RSS
Как макросом открыть CSV файл в запущенном Excel?
 
Всем привет.  
 
Не могу придумать способ реализации для вроде бы элементарного действия.  
 
Итак, есть кнопка на панели инструментов, при нажатии которой должно выскочить диалоговое окно выбора файла, после чего выбранный файл (CSV или XLS) должен открыться в Excel (в той копии приложения, из которой запущен макрос)  
 
Разумеется, я знаю, как вывести диалоговое окно выбора файла.  
Итак, у меня есть путь к файлу (CSV или XLS), и мне надо программно открыть этот файл.  
 
С файлами Excel проблем нет - тут поможет Workbooks.Open ИмяФайла  
 
А вот с CSV - проблема.  
Когда мы открываем CSV файл через встроенную в Excel кнопку открытия файла (или Ctrl + O, что то же самое,    
Excel АВТОМАТИЧЕСКИ распознаёт, какой разделитель столбцов используется.  
Когда же мы открываем файл программно, Excel использует настроенные в системе (или в самом Excel) разделители.  
 
А в моём случае, разделители в CSV могут быть любые, и хотелось бы, чтобы Excel сам определял разделитель.  
 
 
Стал я пробовать различные варианты:  
(предположим, что путь в файлу CSV мы уже знаем)  
 
Const CSVfilename = "C:\test.csv"  
 
Sub test1()  
   Workbooks.Open CSVfilename  
End Sub  
 
Sub test2()  
   Workbooks.OpenText CSVfilename  
End Sub  
 
Sub test3()  
   ThisWorkbook.FollowHyperlink CSVfilename  
End Sub  
 
Sub test4()  
  Application.Dialogs(xlDialogOpen).Show  
End Sub  
 
Sub test5()  
   Shell """" & Application.Path & "\excel.exe" & """ /dde " & CSVfilename  
End Sub  
 
Sub test6()  
   CreateObject("wscript.shell").Run CSVfilename  
End Sub  
 
 
Варианты 1-4 открывают файл, неверно распознав разделитель столбцов  
 
Вариант 5 открывает корректно, но - в новой копии Excel, что неприемлимо  
(как использовать ключи командной строки, чтобы отправить файл в запущенный Excel, я не знаю)  
 
Вариант 6 открывает файл в программе, назначенной для CSV по-умолчанию (у меня это Notepad++)  
Поскольку код будет использоваться на множестве компов, этот вариант не подходит.  
 
 
У кого какие идеи?  
Вроде бы, этот вопрос уже обсуждался, - но поиском не смог найти ответ.
 
Вопрос снят.  
(только написал пост - придумал ещё один вариант, который сработал)  
 
Sub test7()  
   Dim wb As Workbook  
   Set wb = GetObject(CSVfilename)  
   wb.Windows(1).Visible = True  
End Sub  
 
И разделители распознаёт автоматически, и открывает в запущенном Excel  
Вот только не знаю, на всех ли компах будет работать корректно  
 
Если у кого появятся ещё идеи - пишите.
 
Игорь, настоятельно рекомендую использовать параметр Local метода open, или OpenText :-)
Я сам - дурнее всякого примера! ...
 
KukLP, вон оно что...  
я как всегда всё усложнил)  
 
действительно, так всё работает:  
 
Sub test1()  
   Workbooks.Open CSVfilename, local:=True  
End Sub  
 
Не знаешь, проблем не будет ни на каких компах с этим параметром?  
Так можно открывать и файлы Excel (XLS, XLSB и т.п.), не убирая этот параметр?  
 
Просто программа будет работать на сотнях разнотипных машин - региональные настройки могут очень сильно отличаться.
 
Да вроде не должно быть. У меня во всяком случае не было. А тоже, может не на сотнях, но на десятках работало. Проблем, повторюсь, не было ни разу. Там еще есть параметр delimiter, кстати. Это для нетрадиционных:-)
Я сам - дурнее всякого примера! ...
 
Всем привет, проблема будет не решенной со столбцами фиксированной ширины и нестандартными разделителями:  
 
010515DBPU/700       TI       0 5.632    700 17 700  
1.5KE100A           STM   19963 0.104    600 5 600  
1.5KE100CARL         STM       0 0.130   1900 5 1900  
1.5KE10A             STM     850 0.104    600 5 600  
1.5KE120A           STM    7911 0.104    600 5 600  
1.5KE120CA           STM    1821 0.112    600 5 600  
1.5KE12A             STM    4208 0.104    600 5 600  
1.5KE12CA           STM    1742 0.112    600 5 600  
1.5KE130CA           STM     611 0.112    600 99 600  
1.5KE150CA           STM   14882 0.112    600 5 600  
-------------------------------------------------------------------------------  
для таких крайностей необходимо использовать собственный schema.ini  
Который поможет импортировать данные с помощью ADO,DAO  
пример использования для access,  но применить можно и для excel.  
дерзайте.  
 
вот Вам для теста 2 файла
 
......это вложение нужно обязательно
 
Привет, Игорь. <BR>Совсем недавно обсуждалось здесь  http://www.planetaexcel.ru/forum.php?thread_id=40853
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Наверх