我有一个VB程序,它使用位于文本文件中的数据库。当在记事本中打开这个文件时,它告诉我格式是“WINDOWS(CRLF)|ANSI”。
- 我将数据库转移到Google Sheets中,可以很容易地由多个用户更新。
- 我开发了一个谷歌应用程序脚本,将谷歌表格中的数据提取到驱动器上的文本文件中。
问题是当我从Google Sheets电子表格中检索文件时,它是“UNIX(LF)|UTF-8”格式,并且当我将该文件指定为VB程序的源文件时,它不能正确显示某些字符(*“é”;“ô”等)。
我尝试了bash命令:Set-Content C:\Output\file.txt -Encoding Ascii
,但当我用Windows记事本打开它时,我仍然看到“UTF-8”。
我正在寻找一种方法,以UTF-8编码的文本文件从谷歌驱动器恢复到ANSI(Windows-1252)编码的文件。我接受解决方案,无论它是在Bash脚本中还是在Google Apps脚本中(即使我认为对于GSCRIPT来说这是不可能的)
- 用于从工作表提取数据的Google Apps脚本代码:*
- 将数据表转换为字符串的函数。
/**
* Conversion de la feuille Google Sheets en une chaîne de caractères.
* Cette chaîne de car. peut servir à la création d'un fichier texte.
* Le séparateur de ligne est un retour à la ligne (" \n ")
* Le séparateur de colonne est une tabulation (" \t ")
*
* @param {SpreadsheetApp.Sheet} sheet
*
* @return {String} txt
*/
function _getData( sheet ){
var numRows = sheet.getDataRange().getNumRows();
var data;
var txt = "";
try {
data = sheet.getDataRange().offset( 1, 0, numRows - 1).getDisplayValues(); // récupération des valeurs de la feuille (hormis l'en-tête).
txt = data.map(function (col) {return col.join('\t');}).join('\n'); // Création d'une chaîne de caractère unique. (Delimiter col : tab ; Delimiter row : backslash)
}catch( err) {
Logger.log(err);
Browser.msgBox('Erreur : ' + err);
}
finally{
return txt;
}
}
- 从BLOB创建文本文件
/**
*
* Création d'un fichier au format DAT.
* Le fichier sera situé dans le répertoire :
*
*
* @param {String} extractName
* @param {String} data
*
* @return {DriveApp.File} file
* /
function createDatFile( extractName, data ){
var blob;
var directory;
var fileName = extractName + ".DAT";
var file;
try{
directory = DriveApp.getFolderById(''); // Répertoire Drive Partagé où l'extraction sera effectuée.
blob = Utilities.newBlob( '' , MimeType.PLAIN_TEXT).setDataFromString( data ); // Création d'un Blob de données à partir d'une chaîne de caractères.
// TODO Supprimer le fichier s'il existe déjà.
file = DriveApp.createFile( fileName, blob.getDataAsString() ).moveTo( directory ); // Création d'un fichier au format ".DAT" dans un répertoire.
return file;
}catch(err){
Logger.log("Erreur : " + err);
Browser.msgBox("Erreur : " + err)
}
}
- Main
function exportToTextFile() {
var activeSheet;
var extractName = "SRC_DATA";
var data;
activeSheet = SpreadsheetApp.getActive().getActiveSheet();
data = _getData( activeSheet );
createDatFile( extractName, data);
return
}
1条答案
按热度按时间ni65a41a1#
我相信你的目标如下。
windows-1252
的文本文件。当您的脚本被修改时,下面的修改如何?
发自:
至:
参考文献: