【发布时间】:2019-03-27 20:37:02
【问题描述】:
我的 Google 应用脚本创建的 zip 文件“难以”在 Window 桌面中打开。 zip 不会在文件资源管理器中打开,但我可以在程序 7zip 中打开它。这些文件是从 Google 工作表中的列(混合文本和数字)创建的。 Notepad++ 说它们是用 UTF-8 编码的,并且 DXF 文件已更改为一行逗号分隔的值。该文件太大而无法手动修复,因为它通常约为 100,000 行。
如果我不压缩文件,谷歌应用程序脚本会拒绝 DXF 文件,因为它不受支持。 DXF 文件是具有 AutoCAD 可以解释的文本列的文本文件。我可以将 DXF 扩展名更改为 TXT 并单独通过电子邮件发送,但我希望文件具有正确的扩展名。
编辑(2019-04-02):我当前的问题是从电子表格的第三页通过电子邮件发送或下载可用的 DXF。我可以手动执行此操作,但我想让使用此文件的任何人尽可能轻松。最后,我将使用结构的 (x,y) 位置以及每个结构的描述性文本来修改通用 DXF 文件,尽管下面的脚本目前不这样做。谢谢!
编辑2(2019-04-08):根据建议,我找到了一些将数据格式化为CSV数组的代码: var csv = ""; dxfValues.forEach(function(e1) {csv += e1.join(",") + "\n";}); 添加此代码会从表格中的列创建一个可读、可用的 DXF 文件。它可以处理 DXF 文件中一些格式奇特的字符和行,而不会丢弃它们或将它们混合在一起。
var values = ss2.getDataRange().getValues();
var filename = JobNumber + ' Structures Dips ' + new Date().getTime() + ".txt";
DriveApp.createFile(filename, values);
var dxfValues = ss3.getDataRange().getValues();
var dxf_Filename = JobNumber + ' Structures Dips ' + new Date().getTime() + ".dxf"; // DXF file name
var folder = "---folder id---"; // Folder ID
var csv = "";
dxfValues.forEach(function(e1) {csv += e1.join(",") + "\n";});
var url = DriveApp.getFolderById(folder).createFile(dxf_Filename, csv, MimeType.CSV);
var Dipblob = DriveApp.getFilesByName(filename).next().getBlob();
var DXFblob = DriveApp.getFilesByName(dxf_Filename).next().getBlob();
var zip = Utilities.zip([Dipblob , DXFblob]);
MailApp.sendEmail({
to: "--email address---",
subject: filename,
htmlBody: "Hello <br><br>" + "Here are the generated dip files",
attachments: [zip],
name: 'Scot May'
});
}
我想要一个包含文本文件和 DXF 文件的电子邮件 zip 文件,或者附有 filename.txt 和 filename.dxf 的电子邮件。谢谢。 ** 问题已解决,见上文**
【问题讨论】:
-
Windows 资源管理器无法打开 zip 文件这一事实并不意味着它已损坏。 zip 的各种 Windows 资源管理器实现从一开始就存在差距。他们通常在处理大文件和跨文件时遇到问题。如果 7zip 有效,为什么不使用它?
-
我的目标是将这份 Google 表格、脚本和表格分发给我公司的其他人。为了便于采用,我不想强迫他们使用 7zip。 (编辑 - 另外,我不知道 Windows)
-
如果您要分发,请立即停止并创建一个附加组件。你只想更新一件事。
-
我会这样做的。
-
在您的问题中包含一个示例表数据布局和一个应该创建的正确 DXF 文件示例。
标签: google-apps-script google-sheets