javascript - Google Sheets - 从硬盘驱动器获取文件名并插入到工作表中 - (模拟 Excel Application.GetOpenFilename)

标签 javascript file google-apps-script google-sheets filepicker

在 Excel 中,我可以使用 application.getopenfilename 运行 VBA 脚本,并且能够将所选项目的文件路径放入该单元格中。我正在尝试转换我的 VBA

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  If Not Application.Intersect(Target, Range("AG4:AG910")) Is Nothing Then
  Dim FileNames As Variant
  Dim Msg As String
  Dim i As Integer
  FileNames = Application.GetOpenFilename(MultiSelect:=True)
  If IsArray(FileNames) Then
      For i = LBound(FileNames) To UBound(FileNames)
          Msg = Msg & FileNames(i) & vbNewLine
      Next i
      Target = Msg
          Else
      MsgBox "No files were selected."
End If

End If

基本上我希望能够选择图像,然后获取文件名。我只需要文件名,因为客户向我发送了产品图片,我必须在上传之前对其进行优化。

最佳答案

此解释显示:

  • 自动创建自定义菜单项
  • 打开对话框的代码
  • HTML 和 <script>对话框 HTML 中的标记
  • 将结果放入电子表格的代码

Code.gs - onOpen() - 创建自定义菜单

function onOpen() {

  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show Upload Dialog', 'showUploadBox')
      .addToUi();
};

gs 代码 - 打开对话框

function showUploadBox() {

  var htmlOutput = HtmlService.createHtmlOutputFromFile('Dialog')
     .setWidth(500)
     .setHeight(500);

  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Title of Dialog');
};

对话框上传.html

使用此 HTML 创建一个新文件

<div id="formDiv">

<form id="myForm">

    <input id="fileName" name="picToLoad" type="file" />
    <br>
    <br/>
    <input type="button" value="Submit" onclick="fncGetFileName()" />
  <br>
  <br>
  <br>
    <input id="idBtnClose" type="button" value="Close" style="display: none" onclick="google.script.host.close()" />
</form>
</div>

<br>
<br>

<div id="status" style="display: none">
  <!-- div will be filled with innerHTML after form submission. -->
  Working. Please wait...
</div>


<script>

function fncGetFileName(frmData) {
  console.log('fncGetFileName ran!');

  var theFileName = document.getElementById('fileName').value;
  theFileName = theFileName.slice(12);

  console.log('theFileName: ' + theFileName);

  document.getElementById('status').style.display = 'inline'; //Display msg

  google.script.run
    .withSuccessHandler(updateOutput)
    .processForm(theFileName)
};
  // Javascript function called by "submit" button handler,
  // to show results.

  function updateOutput() {

    var outputDiv = document.getElementById('status');
    outputDiv.innerHTML = "The File Name was Written!";

    document.getElementById('idBtnClose').style.display = 'inline'; //Display msg
  }

</script>

将文件名保存到工作表的 gs 代码

function processForm(argFileName) {
  Logger.log('argFileName: ' + argFileName);

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var theSheet = ss.getActiveSheet();

  var theRange = theSheet.getRange("B4");
  theRange.setValue(argFileName);
};

关于javascript - Google Sheets - 从硬盘驱动器获取文件名并插入到工作表中 - (模拟 Excel Application.GetOpenFilename),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862765/

相关文章:

javascript - Angular - 文件输入字段的更改检测仅工作一次

java - Android Java 从 res/raw 读取文本文件,文件未找到错误

javascript - 表单答案电子表格 - onChange 触发器

javascript - 如何克服使用 Phonegap 时按钮无响应的问题?

javascript - 从 polymer 0.5 升级到 0.8

javascript - Node.js:找不到模块 'chai'

javascript - 如果在对象中定义则覆盖函数,否则默认功能

python - 假设解密 key 被很好地隐藏,如何加密 python 模块

google-apps-script - 读取 HTTP 请求 header ,并修改 Apps 脚本 Web 应用程序的响应 header

arrays - 将 JSON 数组输出打印到 Google Sheet