По поводу вашего последнего вопроса ниже:
Это один из способов. Я склонен делать такие вещи на стороне сервера, а затем передавать его как объект в HTML-файл. Это некоторый код из моего предыдущего проекта. Он не предназначен для точного соответствия вашим потребностям, но вы можете использовать его в качестве отправной точки.
Google Script:
function htmlSpreadsheet(ssO)
{
var br='<br />';
var s='';
var hdrRows=1;
var ss=SpreadsheetApp.openById(ssO.id);
var sht=ss.getSheetByName(ssO.name);
var rng=sht.getDataRange();
var rngA=rng.getValues();
s+='<table>';
for(var i=0;i<rngA.length;i++)
{
s+='<tr>';
for(var j=0;j<rngA[i].length;j++)
{
if(i<hdrRows)
{
s+='<th id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="20" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
}
else
{
s+='<td id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="20" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
}
}
s+='</tr>';
}
s+='</table>';
s+='</body></html>';
var namehl=Utilities.formatString('<h1>%s</h1>', ss.getName());
var shnamehl=Utilities.formatString('<h2>%s</h2>', sht.getName());
var opO={hl:s,name:namehl,shname:shnamehl};
return opO;
}
Это Javascript, который его называет:
$(function() {//requires appropriate JQuery resource or you could us windows.onload
google.script.run
.withSuccessHandler(updateSelect)
.getAllSpreadSheets();
});
Это Javascript, который обновляет электронную таблицу:
function updateSS(i,j)
{
var str='#txt' + String(i) + String(j);
var value=$(str).val();
var ssId=$('#sel1').val();
var name=$('#sel2').val();
var updObj={rowIndex:i,colIndex:j,value:value,id:ssId,name:name};
$(str).css('background-color','#ffff00');
google.script.run
.withSuccessHandler(updateSheet)
.updateSpreadsheet(updObj);
}
и это скрипт Google, который обновляет электронную таблицу:
function updateSpreadsheet(updObj)
{
var i=updObj.rowIndex;
var j=updObj.colIndex;
var value=updObj.value;
var ss=SpreadsheetApp.openById(updObj.id);
var sht=ss.getSheetByName(updObj.name);
var rng=sht.getDataRange();
var rngA=rng.getValues();
rngA[i][j]=value;
rng.setValues(rngA);
var data = {'message':'Cell[' + Number(i + 1) + '][' + Number(j + 1) + '] Has been updated', 'ridx': i, 'cidx': j};
return data;
}
Можно просто записать вызов sftp клиенту командной строки через пакетный файл, если Вы хотите выполнить это.
Проверьте Shell () функция в VBA.
Под событием щелчка кнопки на Вашей форме добавляют в коде:
mySFTPCall = "sftp <insert your options here!>"
Call Shell(mySFTPCall, 1)
Я использовал это прежде, чтобы просто скопировать файлы прямо через сетевые ресурсы и т.д. для обмена данными от внутреннего Доступа DB. Конечно, Вы могли стать более необычными при необходимости.
Можно использовать наш SFTPBlackbox (Выпуск ActiveX).
Chilkat имеет компонент FTP, который работает с COM/ActiveX. Это говорит, что поддерживает FTP по SSL (FTPS), которые я думаю, совпадает с SFTP. Я использовал некоторые их другие продукты прежде для .NET, и они работали очень хорошо. У них есть бесплатная демонстрационная версия, таким образом, Вы бывший нечего терять путем загрузки и проверки, работают ли они на Вас.
Вы могли выполнить вызов оболочки к приложению командной строки, такому как MOVEit Свободно, который является бесплатным программным обеспечением, для сценариев безопасных передач ftp. Я использовал его в прошлом, и это имеет некоторые хорошие функции и работало вполне хорошо.
MOVEit Свободно является бесплатной командной строкой FTP FTP / безопасный FTP SSL (FTPS) клиент для Выпуска Windows Vista Business, 2003, XP, 2000, ME и системы NT 4.0.
Я предположил бы, что просто необходимо найти COM-объект FTP. Необходимо затем смочь инстанцировать этого в коде модуля Доступа. dart.com имеет один, и я уверен, что существует намного больше (просто Google FTP COM).