Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 35
Excel

Длинные имена файлов в Excel

27.03.2021, 16:12. Показов 11198. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Некоторое время назад столкнулся с проблемой, что в таблицах Excel невозможно редактировать файлы путь и имя которых превышает 255 символов.
Прочитал на сторонних формах о "костыле" - создании виртуального диска, для сокращения пути к файлу.
Хочу это автоматизировать.
К сожалению, мои изыскания не привили привели к успеху. Прошу знающих форумчан помочь с этой проблемой.
Проблема, в данный момент, в том, чтобы получить путь и имя файла, которое открывает Excel, до его загрузки.

Попытка 1:
ЛКМ загружается до открытия нужного файла, но к сожалению в коллекции Workbook только файл "PERSONAL.XLSB".
Файла, который должен открыться после загрузки ЛКМ в этой коллекции нет.

Visual Basic
1
2
3
4
5
6
7
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
 
   For Each w In Application.Workbooks
       MsgBox (w.FullName)
   Next w
 
End Sub
Попытка 2:
Получив hwnd окна по WMI добраться до названия файла. К сожалению, также не нашёл

Попытка 3:
Возможно где-то в переменной среде Excel есть эта информация. Но функция Environ() такой информации не дала.

Идея: Если ни одним способом нет возможности получить информацию, мне требуемую, полагаю возможно написать программу-посредник и назначить на неё открытия файлов excel.

Жду ответов и заранее благодарю за любую помощь
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2021, 16:12
Ответы с готовыми решениями:

Длинные имена файлов в Excel
Доброго времени суток! Некоторое время назад столкнулся с проблемой, что в таблицах Excel невозможно редактировать файлы путь и имя которых...

Длинные имена файлов
вот например есть файл с длинным именем ~150 знаков если попробовать скопировать его в другую папку с более длинным путем чем был до этого...

Длинные имена файлов
Здравствуйте. Подскажите, можно ли решить проблему. Решил систематизировать все файлы на рабочем компьютере, несколько дней чистил, не...

27
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
28.03.2021, 16:14
Студворк — интернет-сервис помощи студентам
Если у вас программа-посредник, пусть она при старте (каталог-то знает?) сократит путь применением subst. И запускает с максимально сокращенного пути:

subst Q: D:\3274837534657msckjseufsefuerwhf7e\nsc jdcuweryf34y5t\sadncbsdf7dsy
start Q:\dfdefdbjhjhjhjjax\our_good_file.xlsx

А по окончании уберет subst. Или сам эксель может перед Application.Quit

Либо вариант: посредник копирует файл в короткую папку (C:\Temp), по окончании перебросит обратно. Задача не совсем детально поставлена, чтобы дать хороший совет. Что за посредник, какая обработка и проч.
0
0 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 35
28.03.2021, 16:21  [ТС]
Zeag, Благодарю за совет.

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

Задача не совсем детально поставлена, чтобы дать хороший совет.
Какими ответами я бы мог помочь?

Что за посредник, какая обработка и проч.
Пишу посредник на vbs, который будет:
1. Проверять ассоциацию файлов Excel и сохранять её в переменную для определения местоположения программы
2. Получить аргументом название и путь открываемого файла
3. Фильтровать на длинные и короткие пути
4. Запускать короткие пути без дополнительной обработки
5. Подключать виртуальный диск и запускать длинные файлы
6. После закрытия файла демонтировать виртуальный диск

Программу-посредник планирую ассоциировать по умолчанию со всеми расширениями, с которыми работает программа Excel
0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
28.03.2021, 17:21
Цитата Сообщение от xuor007 Посмотреть сообщение
2. Получить аргументом название и путь открываемого файла
Так и получите его:
Code
1
2
3
if Wscript.Arguments.Count > 0 then
    msgbox Wscript.Arguments(0)
end if
И если Len(Wscript.Arguments(0)) > 250 - ищете справа \, отрезаете часть, делаете на нее Subst
0
0 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 35
28.03.2021, 18:30  [ТС]
Zeag,
Так и получите его
Идея: Если ни одним способом нет возможности получить информацию, мне требуемую, полагаю возможно написать программу-посредник и назначить на неё открытия файлов excel.
В данный момент пишу программу-посредник, которая будет запускаться при открытии файлов xls, но мне не нравится это решение
Это и был мой крайний вариант. Но я хотел бы найти лучшее решение.


Не по теме:

Вспомнился на эту тему бородатый анекдот про студента и блоху:)

0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
28.03.2021, 19:32
Да, про блоху анекдот хороший. ))
У вас файлы большие? Самый простой вариант - скопировать файл в каталог с коротким (в смысле длины) путем и запустить эксель, по окончании процесса скопировать обратно.
Хм. Уж на что AutoIt мощная штука, но он скопировать не смог.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
If $CmdLine[0] > 0 Then
   If StringLen($CmdLine[1]) >= 250 Then
      Local $FN = StringMid($CmdLine[1], StringInStr($CmdLine[1], "\", 0, -1) + 1)
      If FileCopy($CmdLine[1], @WorkingDir & "\" & $FN) = 0 Then
         MsgBox(64, "Ah...", "Copy failure")
         Exit
      EndIf
      ShellExecuteWait(@WorkingDir & "\" & $FN)
      FileCopy(@WorkingDir & "\" & $FN, $CmdLine[1])
   Else
      ShellExecute($CmdLine[1])
   EndIf
EndIf
Тогда https://www.outsidethebox.ms/16798/ предлагают mklink.
Или изучать Win32 NameSpaces (https://stackoverflow.com/ques... pace-names) - задача же перехватить и исправить имя до старта экселя. Так что "переходник" придется ваять, ага.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
28.03.2021, 19:49
xuor007, и после этих действий (ручных) пытаетесь открыть файл Excel-ом? Уже в новой директории? Так?
Тогда кто мешает изменить п.3 вашего алгоритма таким образом:

3. Создаю директорию AAA, копирую в нее файл, открываю его Excel-ом, выполняю необходимые действия, закрываю
3a. Переименовываю директорию AAA в @#$% и т.п.
0
0 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 35
29.03.2021, 03:59  [ТС]
Catstail,
Тогда кто мешает изменить п.3 вашего алгоритма таким образом
У вас файлы большие? Самый простой вариант - скопировать файл в каталог с коротким (в смысле длины) путем и запустить эксель, по окончании процесса скопировать обратно.
Сейчас так и делаю, но я хотел бы автоматизировать процесс

Zeag,
Тогда https://www.outsidethebox.ms/16798/ предлагают mklink
Или изучать Win32 NameSpaces
Благодарю за совет. Он меня натолкнул на мысль, что я не там ищу. Вооружившись утилитой "spyxx14" я начал разбирать треды процесса explorer и нашел нужную мне информацию
Миниатюры
Длинные имена файлов в Excel  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
29.03.2021, 07:00
Цитата Сообщение от xuor007 Посмотреть сообщение
но я хотел бы автоматизировать процесс
- его стоит автоматизировать с другого конца: программно сканировать дерево директорий и получать нужные имена файлов. Зачем проводник?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2021, 07:00

Длинные имена исходных файлов
Доброго времени суток. Опишу суть проблемы: поймал в систему какую-то гадость. Перед тем, как чистить решил сохранить важные данные....

Длинные имена файлов в глубине папок
Помогите решить проблему, это касаеться ОС в целом, у меня расположена папка в самом начале жесткого диска, но в ней множество подпапок для...

Скрипт html в pdf не принимает длинные имена файлов
Выдает ошибку WinError206, если длина файла большая, помогите исправить. import pdfkit import os path_wkthmltopdf =...

Укоротить длинные имена до размера K символов, а те имена, которые короче K символов дополнить восклицательными знаками
Дан список из N имён. Необходимо укоротить длинные имена до размера K символов, а те имена, которые короче K символов дополнить...

Длинные имена
Добрый вечер! Понадобилось перейти на 12.04 с 13.04, но я в шоке, что файлы с home каталога не копируются(точнее все перенести нельзя на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru