如何发送文档到应用程序脚本Kotlinandroid

fxnxkyjh  于 2023-01-24  发布在  Android
关注(0)|答案(1)|浏览(103)

目前,我发送字符串和图像文件作为字符串。通过应用程序脚本(表扩展名)到表。现在我需要发送一个文档文件,如(。zip,。glb,。obj,。阿普等)我需要发送这些类型的文件到谷歌表。所以现在我需要使用户选择的文件作为。zip。所以现在我需要发送该。zip文件到谷歌表。但我不能这样做。

private fun startUploading() {
        try {
            val map: HashMap<String, String> = HashMap()

            map["instagramLink"] = binding.creatorInstaID.text.toString()
            map["tutorialLink"] = binding.youTubeLink.text.toString() 
            map["detailDescription"] = binding.detailDescription.text.toString()
            map["coverImage"] = userImage!!

            mainViewModel.saveProduct(map)

        }

        catch (e:Exception){
            Toast.makeText(context, "Fill all the details", Toast.LENGTH_SHORT).show()
        }
    }

这里userImage是用户选择的图像转换为字符串。其他值是字符串值,它可以很容易地发送到谷歌工作表。现在我如何发送一个自定义文件类型到谷歌工作表。像这样。

sqxo8psd

sqxo8psd1#

我找到的唯一解决方法是将文件编码转换为base64。然后将base64字符串添加到Google工作表中。我在Google Drive中创建了一个带有Zip文件存储的示例文件。您可能需要根据需要调整代码。
另外,请记住Google Cell的字符数限制是50,000,因此我添加了一个if语句,以防编码文件超过50,000个字符,并将字符串拆分为45,000个字符的数组。

  • 注意:相同的示例代码可用于任何类型的文件。*
function encode64() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")

  // get the file from Google Drive using the ID
  let file = DriveApp.getFileById("Drive_Zip_File_ID");

  //convert the zip file to blob
  let file_in_blop = file.getBlob();

  //convert the blop to bytes
  let file_in_bytes = file_in_blop.getBytes();

  //encode the bytes to base64
  let encoded = Utilities.base64Encode(file_in_bytes);

  //get the length of charactes from the base 64 encode
  let length_string = encoded.length

  //split the string to array in chunks less than 45000 characters
  if (length_string > 50000){
    const result = encoded.match(/.{1,45000}/g) ?? [];
    for (let i = 0; i < result.length; i++) {
      sheet.getRange(i+2,2).setValue(result[i]); 
    }
  }else(sheet.getRange("B2").setValue(result)); 
}

相关问题