I have an Excel Spreadsheet (.xls) which i want the users to be able to download it from my webpage.
Maybe a ‘download’ button on the page and when users click on it, the file will be downloaded.
May i know how can this be done?
Code snippets and references will be appreciated.
Naveed
41.3k32 gold badges97 silver badges131 bronze badges
asked Jan 6, 2012 at 2:30
1
You can use simple html links:
link:
<a href='/path/to/excel/file.xls' target="_blank">Download</a>
button:
<form>
<input type="button" value="Download" onClick="window.location.href='/path/to/excel/file.xls'">
</form>
answered Jan 6, 2012 at 2:33
NaveedNaveed
41.3k32 gold badges97 silver badges131 bronze badges
1
How about just referring to the file through an anchor?
<a href="path-to-file.xls">Download</a>
answered Jan 6, 2012 at 2:32
1
I think this should be fine too:
<a href="path-to-file" download="abc.xls">Download</a>
download: name of file to be downloaded as.
answered Oct 3, 2019 at 6:07
Загрузка файлов по URL ссылкам
Загрузка файлов по URL ссылкам – инструмент для импорта файлов с веб ресурсов по URL ссылкам, в выбранную папку на компьютере.
С возможностью их переименования при импорте.
Инструкция по использованию:
- Диапазон ссылок на файлы – ссылки на файлы. Должна содержать протокол (например,
http://
). - Выбор папки для файлов – путь к папки для сохранения файлов.
Пример использования инструмента загрузки файлов по URL ссылкам
URL файла – кнопка выбора диапазона ячеек с ссылками URL, на файлы для скачивания. Если в соседнем столбце с ссылками указать новые названия файлов, то при загрузке они будут переименованы. Если в соседнем столбце пусто, то название файлов останется без изменения.
Выбор папки для сохранения – кнопка выбора папки, в которую будут загружены файлы.
xaus 10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
||||
1 |
||||
14.02.2013, 12:36. Показов 4980. Ответов 14 Метки нет (Все метки)
проблема такая, не хочет скачиваться фаил с сайта вот код сылки:
адрес указан точно проверял несколько раз, незнаю что ему ненравиться
0 |
Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
|
14.02.2013, 12:43 |
2 |
не хочет скачиваться фаил а что пишет?
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 12:44 [ТС] |
3 |
пишет так Проверьте, верно ли написан адрес, или попробуйте найти сайт.»
0 |
12655 / 7268 / 766 Регистрация: 09.09.2009 Сообщений: 28,353 |
|
14.02.2013, 12:45 |
4 |
адрес указан точно то есть, сам файл у вас расположен по адресу: Код http://адрес_вашего_сервера/assets/files/Price/Price_12.xls ?
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 14:48 [ТС] |
5 |
то есть, сам файл у вас расположен по адресу: Код http://адрес_вашего_сервера/assets/files/Price/Price_12.xls ? /assets/files/Price/Price_12.xls
0 |
12655 / 7268 / 766 Регистрация: 09.09.2009 Сообщений: 28,353 |
|
14.02.2013, 14:53 |
6 |
1.
/assets/files/Price/Price_12.xls я вообще-то спрашивал про «вот так»:
Код http://адрес_вашего_сервера/assets/files/Price/Price_12.xls 2. прямое обращение к файлу (в адресной строке браузера, если ввести такой адрес): Код http://адрес_вашего_сервера/assets/files/Price/Price_12.xls к чему приводит?
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 15:00 [ТС] |
7 |
1. 2. прямое обращение к файлу (в адресной строке браузера, если ввести такой адрес): Код http://адрес_вашего_сервера/assets/files/Price/Price_12.xls к чему приводит? ну я сказал же так))
0 |
KOPOJI Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
||||
14.02.2013, 15:03 |
8 |
|||
там все норм это 100% в пути Если там все норм 100% — то этой темы бы не было. Раз этот файл не находит, значит два варианта: Добавлено через 1 минуту
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 15:10 [ТС] |
9 |
Если там все норм 100% — то этой темы бы не было. Раз этот файл не находит, значит два варианта: Добавлено через 1 минуту да на денвере,
0 |
Dmitry |
14.02.2013, 15:10
|
Не по теме:
ну я сказал же так)) если у тебя там все так хорошо, то чего ж ты тут народу мозги паришь? ой! блин! не хорошо?
0 |
Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
|
14.02.2013, 15:12 |
11 |
путь от корня диска денвера к файлу скопируйте сюда (в проводнике винды)
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 15:20 [ТС] |
12 |
Не по теме: ответил же что ее ненравиться? мазги никаму непарю Добавлено через 6 минут
0 |
KOPOJI Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
||||
14.02.2013, 15:24 |
13 |
|||
0 |
10 / 10 / 0 Регистрация: 30.01.2013 Сообщений: 93 |
|
14.02.2013, 15:38 [ТС] |
14 |
пробовал безрезультатно
0 |
Почетный модератор 16842 / 6720 / 880 Регистрация: 12.06.2012 Сообщений: 19,967 |
|
14.02.2013, 15:39 |
15 |
а должно. Проверьте, не закралась ли где русская буква в имени файла.
0 |
Хитрости »
2 Декабрь 2016 40495 просмотров
Как скачать файл из интернета по ссылке
Вся суть статьи уже в заголовке. Возникает порой необходимость скачивания файлов из интернета только на основании ссылки. Например, это какие-то постоянно меняющиеся данные или автоматически генерируемая другим кодом ссылка. Или еще более усугубленный вариант — строк 100 со ссылками на файлы, которые надо скачать…Вот уж радости руками по каждой клацать
Поэтому выкладываю решение, которое в большинстве случае поможет при помощи Visual Basic for Applications скачать файл на основании ссылки URL:
'--------------------------------------------------------------------------------------- ' File : mDownloadFileFromURL ' Purpose: код позволяет скачивать файлы из интернета по указанной ссылке '--------------------------------------------------------------------------------------- Option Explicit 'объявление функции API - URLDownloadToFile ' работает на любых ПК под управлением ОС Windows ' на MAC код работать не будет #If Win64 Then 'для операционных систем с 64-разрядной архитектурой Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong #Else #If VBA7 Then 'для любых операционных систем с офисом 2010 и выше Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As LongPtr) As LongPtr #Else 'для 32-разрядных операционных систем Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long #End If #End If 'переменная для хранения пути к папке Dim sFilePath As String Function CallDownload(sFileURL As String, sFileName As String) ' sFileURL - ссылка URL для скачивания файла ' sFileName - имя файла с расширением, которое будет присвоено после скачивания Dim h If sFilePath = "" Then 'диалоговое окно выбора папки 'подробнее: http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/ With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Function End If sFilePath = .SelectedItems(1) End With End If If Right(sFilePath, 1) <> "" Then sFilePath = sFilePath & "" 'проверяем есть ли файл с таким же именем в выбранной папке If Dir(sFilePath & sFileName, 16) = "" Then 'файла нет - скачиваем h = DownloadFileAPI(sFileURL, sFilePath & sFileName) Else 'файл есть - запрос на перезапись If MsgBox("Этот файл уже существует в папке: " & sFilePath & vbNewLine & "Перезаписать?", vbYesNo, "www.excel-vba.ru") = vbYes Then 'если существующий файл открыт - невозможно его перезаписать, показываем инф.окно 'отменяем загрузку If IsBookOpen(sFileName) Then MsgBox "Невозможно сохранить файл в указанную папку, т.к. она уже содержит файл '" & sFileName & "' и этот файл открыт." & _ vbNewLine & "Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru" Else h = DownloadFileAPI(sFileURL, sFilePath & sFileName) End If End If End If CallDownload = h End Function 'функция скачивания файла в выбранную папку Function DownloadFileAPI(sFileURL, ToPathName) ' sFileURL - ссылка URL для скачивания файла ' ToPathName - полный путь с именем файла для сохранения Dim h Dim sFilePath As String Dim sFileName As String 'вызов функции API для непосредственно скачивания h = (URLDownloadToFile(0, sFileURL, ToPathName, 0, 0) = 0) 'если h = False - файл не удалось скачать, показываем инф.окно If h = False Then MsgBox "Невозможно скачать файл." & vbNewLine & _ "Возможно, у Вас нет прав на создание файлов в выбранной директории." & vbNewLine & _ "Попробуйте выбрать другую папку для сохранения", vbInformation, "www.excel-vba.ru" Exit Function Else 'файл успешно скачан sFileName = Dir(ToPathName, 16) sFilePath = Replace(ToPathName, sFileName, "") If MsgBox("Файл сохранен в папку: " & sFilePath & _ vbNewLine & "Открыть файл сейчас?", vbYesNo, "www.excel-vba.ru") = vbYes Then If IsBookOpen(sFileName) Then MsgBox "Файл с именем '" & sFileName & "' уже открыт. Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru" Else Workbooks.Open ToPathName End If End If End If DownloadFileAPI = h End Function 'Функция проверки - открыта ли книга с заданным именем 'подробнее: ' http://www.excel-vba.ru/chto-umeet-excel/kak-proverit-otkryta-li-kniga/ Function IsBookOpen(wbName As String) As Boolean Dim wbBook As Workbook For Each wbBook In Workbooks If Windows(wbBook.Name).Visible Then If wbBook.Name = wbName Then IsBookOpen = True: Exit For End If Next wbBook End Function
Код необходимо скопировать и вставить в книгу в стандартный модуль. Макросы должны быть разрешены.
Основная функция, отвечающая за непосредственно скачивание — это функция API(Application Programming Interface) URLDownloadToFile. Она объявлена в самом верху кода. Там есть страшные директивы вроде #If Win64 Then. Это особые директивы, которые работают даже вне процедур. Поэтому не надо удивляться, что они вне всяких Sub и тем более не надо эти Sub-ы добавлять. При этом так же не надо удивляться, если какие-то из строк внутри этих директив будут подсвечены компилятором VBA красным шрифтом. На функциональность это не повлияет.
Вызов скачивания файла происходит обычным обращением к функции CallDownload. Например, есть ссылка для скачивания: http://www.excel-vba.ru/files/book.xls. И сохранить надо под именем «Книга1.xls». Вызываем функцию скачивания файла:
Sub DownloadFile() Call CallDownload("http://www.excel-vba.ru/files/book.xls", "Книга1.xls") 'вызываем скачивание файла End Sub
Функция сама запросит папку для сохранения файла и после скачивания предложит открыть этот файл. Если такой файл уже есть — будет предложено его перезаписать.
К статье приложен файл, в котором код чуть расширен — он позволяет скачивать файлы сразу из множества ячеек, проставляя при этом признак — скачан файл или нет. И если сразу весь список обработать не получилось и какие-то файлы остались не скачанные(например, имена совпадали, а заменять файлы не надо было), то в этом случае можно будет повторно запустить код и скачиваться будут лишь те, у которых статус не является «Скачан!».
Так же т.к. ячеек много, перед скачиванием файлов будет выбор — запрашивать ли открытие файлов после скачивания или нет. Если открывать не надо, следует ответить Нет. Тогда файлы просто будут скачаны в указанную папку. Однако, если в этой папке будут расположены файлы с идентичными именами — запрос на перезапись все же появится, при этом для каждого файла. Если подобный запрос так же мешает, то надо этот блок:
'проверяем есть ли файл с таким же именем в выбранной папке If Dir(sFilePath & sFileName, 16) = "" Then 'файла нет - скачиваем h = DownloadFileAPI(sFileURL, sFilePath & sFileName) Else 'файл есть - запрос на перезапись If MsgBox("Этот файл уже существует в папке: " & sFilePath & vbNewLine & "Перезаписать?", vbYesNo, "www.excel-vba.ru") = vbYes Then 'если существующий файл открыт - невозможно его перезаписать, показываем инф.окно 'отменяем загрузку If IsBookOpen(sFileName) Then MsgBox "Невозможно сохранить файл в указанную папку, т.к. она уже содержит файл '" & sFileName & "' и этот файл открыт." & _ vbNewLine & "Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru" Else h = DownloadFileAPI(sFileURL, sFilePath & sFileName) End If End If End If
заменить на всего одну строку:
h = DownloadFileAPI(sFileURL, sFilePath & sFileName)
Но при этом надо помнить — что при этом можно потерять какие-то важные файлы. Поэтому подобные вещи вы делаете на свой страх и риск.
Однако следует помнить одну вещь: не все сайты вот так запросто разрешают скачивать с них файлы, тем более пачками. Особенно это актуально для всякого рода форексов и иже с ними. Возможно, получится скачать один, два, три — десять файлов. Но всегда может случиться так, что сайт просто заблокирует ваш IP до конца дня, т.к. на сайте установлено ограничение на автоматизированное обращение извне. При этом для разных сайтов решение данной проблемы может быть различным и не всегда решаемым
Скачать файл
Tips_Macro_DownloadFileFromURL.xls (64,0 KiB, 3 838 скачиваний)
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Функционал загрузки по ссылке с авторизацией используется только при авторизации через web-форму на сайте. Если нужно использовать http-авторизацию или авторизацию на ftp-сервере, то используется указание примого пути к файлу в таком виде http://login:password@domain.com/path_to_file/file.xlsx.
Загрузка по ссылке с авторизацией настраивается по этой ссылке В открывшемся окне сначала указываем ссылку на страницу авторизации После того, как указатель убран из поля со ссылкой на страницу авторизации, модуль должен автоматически загрузить параметры для авторизации По названию параметров нужно найти логин и пароль, ввести их значения, и указать ссылку на сам файл импорта На некоторых сайтах модуль не может автоматически загрузить параметры авторизации, либо загружает их неправильно. В этом случае необходимо вручную авторизоваться на сайте поставщика и получить параметры авторизации из http-запроса. Как это делается, можно посмотреть в видео-инструкции Загрузка файла с Email-адреса | Описание курса | Указание пути к файлу |
Пользовательские комментарии
Часто требуется макросом скачать некий файл из интернета.
Обычно в этом помогает WinAPI-функция URLDownloadToFile, но есть также возможность загрузить файл без её использования:
Чем чревато использование функции URLDownloadToFile — по сути, ничем, кроме как необходимостью прописывать её в 2 вариантах, для обеспечения совместимости с 64-битной Windows
#If VBA7 Then ' Office 2010-2013 Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr #Else ' Office 2003-2007 Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long #End If Function DownLoadFileFromURL(ByVal URL$, ByVal LocalPath$, Optional ByVal DisableCache As Boolean = False) As Boolean On Error Resume Next If (LocalPath$ = "") Or (URL$ = "") Then Exit Function If Not LocalPath$ Like "**" Then LocalPath$ = Environ("TEMP") & "" & LocalPath$ Kill LocalPath$ If DisableCache Then Randomize: URL$ = URL$ & "?rnd=" & Left(Rnd(Now) * 1E+15, 10) DownLoadFileFromURL = URLDownloadToFile(0, URL$, LocalPath$, 0, 0) = 0 End Function
Я же предлагаю другое решение — функцию DownloadFile с использованием объектов Microsoft.XMLHTTP и ADODB.Stream:
Sub ПримерИспользования() СсылкаНаФайл$ = "http://excelvba.ru/sites/default/files/3.jpg" ПутьДляСохранения$ = "C:1.jpg" ' скачиваем файл из интернета DownloadFile СсылкаНаФайл$, ПутьДляСохранения$ ' открываем скачанный файл CreateObject("wscript.shell").Run """" & ПутьДляСохранения$ & """" End Sub
Function DownloadFile(ByVal URL$, ByVal LocalPath$) As Boolean ' Функция скачивает файл по ссылке URL$ ' и сохраняет его под именем LocalPath$ Dim XMLHTTP, ADOStream, FileName On Error Resume Next: Kill LocalPath$ Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") XMLHTTP.Open "GET", Replace(URL$, "", "/"), "False" XMLHTTP.send If XMLHTTP.statustext = "OK" Then Set ADOStream = CreateObject("ADODB.Stream") ADOStream.Type = 1: ADOStream.Open ADOStream.Write XMLHTTP.responseBody ADOStream.SaveToFile LocalPath$, 2 ADOStream.Close: Set ADOStream = Nothing DownloadFile = True Else 'MsgBox "Не удаётся скачать файл " & XMLHTTP.statustext End If Set XMLHTTP = Nothing End Function
Как сделать скачивание файла с сайта.
Не редкость когда нужно бывает создать ссылку для скачивания какого то файла. При этом желательно чтобы это была прямая ссылка для скачивания, а не на внешний сайт (облако, хранилище).
Для скачивания можно передавать файлы самых различных форматов: музыка, видео, текстовые файлы, Excel, архивы и мн. другие.
Как на сайте сделать скачивание файла
Возможно вы хотите поделиться с посетителями вашего сайта каким либо файлом, при этом файл может быть самого любого формата.
Делается это при помощи ссылки на файл с использованием специального HTML тега.
Скачивание архивов
Для файлов-архивов (форматы zip, rar и т.д.) достаточно просто указать ссылку на файл который нужно передать для скачивания. Поэтому здесь применяется обычный HTML тег ссылки:
<a href="#">текст ссылки</a>
#
— вместо символа решётки в атрибутеhref
прописывается ссылка на файл который отдаём для скачивания;- текст ссылки — можно указать текст типа: скачать файл, скачать прайс, скачать песню, скачать видео и т.д.
Так же хочу обратить внимание, что если файл с вашего сайта указываем относительный путь к файлу /music/pesnya.mp3
, а со сторонних сайтов указываем полный путь https://v3c.ru/music/pesnya.mp3
А вот для файлов не архивных форматов (музыка, видео, различные текстовые файлы и документы, изображения и т.д.) применяется специальный для этого атрибут прописываемый в теге <a ...></a>
.
HTML атрибут download
Для того, чтобы передать какой либо файл для скачивания пользователю, в HTML ссылки нужно прописать атрибут download
.
Структура ссылки для скачивания в html строится следующим образом:
<a href="#" download="">текст ссылки</a>
- Вместо знака решётки
#
указываем ссылку на файл передающийся для скачивания. - В атрибуте
download
ничего указывать не нужно. Браузер поймёт что файл нужно скачивать, а не открывать.
Со всплывающей подсказкой:
<a href="#" download="" title="текст всплывающей подсказки">текст ссылки</a>
- В кавычках атрибута
title
прописываем текст всплывающей подсказки.
*Обязательно не забываем переключить редактор в режим HTML чтобы редактировать теги
Текстовая ссылка
Код:
<a href="#" download="" title="всплывающая подсказка">скачать файл</a>
Результат: скачать файл
Скачать через кнопку
Код:
<a href="#" download="">
<button>Скачать файл</button>
</a>
Результат:
Кнопка с иконкой
Так же можно добавить к тексту ссылки иконочный шрифт, если он установлен у вас на сайте. При этом шрифтовую иконку можно поставить перед или после текста ссылки.
Код вставки иконки
<i class="fa fa-download"></i>
— пример для Font Awesome
Код:
<a href="#" download="">
<button>Скачать файл <i class="fas fa-download"></i></button>
</a>
Результат:
Скачивание файла при клике на изображение
Код:
<a href="#" download="">
<img src="/images/knopki/skachat.png" alt="скачать"/>
</a>
Результат:
Со стилями CSS
Так же можно применять все свойства CSS и изменять размер шрифта, название, цвет и т.д.
Для этого добавляем атрибут style=" "
Код:
<a href="#" download="" style="font-size: 35px; color: red">Скачать файл</a>
Результат:
Скачать файл
Записи по теме
Как сделать ссылку
Инструкция как делать ссылки: анкорные и безанкорные ссылки, ссылки в BB-кодах, ссылки открывающиеся в новой вкладке, ссылки на изображениях и т.д.
Онлайн экранирование кода для вставки в HTML
Данный инструмент позволяет на лету без перезагрузки страницы экранировать код для дальнейшей вставки его в HTML, заменяя в коде символы требующие обязательного экранирования для таких случаев. Это символы: < > & »