Так как мне прочитать содержимое файла Google Drive в App Script без переупорядочения строк?
Итак, вот моя ситуация:
- У меня есть несколько файлов, которыетекстовое содержимое с расширениями .lua
- Я скопировал их на мой Google Drive
- Почему-то он считает, что это файлы изображений!Это может быть причиной моих основных проблем
Я пытаюсь прочитать их в сценарии, прилагаемом к таблице Google
function test_bug_readFile_linesInWrongOrder() {
var fileId1 = "12-YLK6Lv5UYNZIgkr-u-DBviwLIOr1F2" // orig file .lua
var fileId2 = "1fyvdHrc45Q_-G02XJ1ismCROKqcxyoPL" // test file shortened and .txt
var fileId3 = "1uw7gG869_yIhpYh2vY2iKtUU5njBRrwA" // test file same as orig but .txt
var file = DriveApp.getFileById( fileId1 )
var fileBlob = file.getBlob()
// var fileBlob = file.getBlob().setContentType( "text/plain" )
var raw = fileBlob.getDataAsString()
Logger.log( raw.length )
Logger.log( raw )
}
- Когда я запускаю это, я получаю содержимое файла, но строки в неправильном порядке !!Вы можете увидеть различные варианты поведения, изменив параметр, передаваемый в getFileById (...)
- fileId1 был исходным файлом и отображает ошибку, описанную ниже
- fileId2 - файл намного меньшего размера иa .txt , но он не ведет себя неправильно, и я получаю строки в правильном порядке
- fileId3 - копия исходного файла, но расширение файла было изменено на .txt (и первая строка для наглядности).Это также не отображает ошибку, но все равно отображается в виде файла изображения
Кажется, что при возникновении ошибки строки с той же родительской строкой и одинаковыми отступамипорядок изменения уровня, возможно, основанный на некоторых хэш-значениях.Я попытался скопировать текст здесь, но не мог понять, что он разметка, и вопрос уже длинный.:)
Я пытался установить MIME-типы на BLOB-объекте до того, как прочел их, но, похоже, это ничего не дало.Я установил, что вышеупомянутые три файла данных доступны для публичного чтения, о каких-либо проблемах сообщите мне.
Итак, как вы читаете содержимое файла или большого двоичного объекта без скрипта Google App «услужливо», переупорядочивая их для вас?
Заранее спасибо за помощь
Редактировать:
Хорошо Я сделал демонстрационный проект: https://docs.google.com/spreadsheets/d/1i_VqYANrqE5FXEQxFAx4dbheEJ89I8MwGSDrxenwHtU вам нужно разрешитьон загрузится, а затем появится меню с заголовком «BugDemo».Как только вы это сделаете, просто выберите единственный пункт меню в нем, и вы должны получить диалоговое окно с разрешениями.Я понимаю, что вы, возможно, не захотите давать разрешение на мой код, поэтому я включил код в блок ниже, чтобы вы могли создать свой собственный проект и быть уверенным, что здесь нет дополнительных задних дверей или чего-либо еще.
"use strict";
function onOpen() {
SpreadsheetApp.getUi().createMenu( 'BugDemo' )
.addItem( 'Read 3 Files and show first 10,000 chars', 'test_bug_readFile_linesInWrongOrder' )
.addToUi()
}
function test_bug_readFile_linesInWrongOrder() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
sh.clear()
var fileIds = ["12-YLK6Lv5UYNZIgkr-u-DBviwLIOr1F2", // orig file .lua
"1fyvdHrc45Q_-G02XJ1ismCROKqcxyoPL", // test file shortened and .txt
"1uw7gG869_yIhpYh2vY2iKtUU5njBRrwA" // test file same as orig but .txt
]
var fileDescs = ["original file",
"much smaller file, also with .txt extension",
"same as first file but with extension of .txt"
]
for ( var col = 0; col < fileIds.length; col++ ) {
var fileId = fileIds[col]
var file = DriveApp.getFileById( fileId )
var fileBlob = file.getBlob()
var text = fileBlob.getDataAsString().slice( 0, 10000 )
var r = sh.getRange( 1, col + 1, 1, 1 )
r.setValue( fileId )
r.offset( 1, 0, 1, 1 ).setValue( file.getName() )
r.offset( 2, 0, 1, 1 ).setValue( fileDescs[col] )
r.offset( 4, 0, 1, 1 ).setValue( text )
}
}
Как только вы запустите это, вы увидите три столбца данных, а первый столбец неправильный.
Ошибки:
Вы должны увидетьчто он идет непосредственно от ["$ AccountWide"] до ["SalesData"] , где в качестве файла данных есть несколько других строк, как это видно из двух других столбцов.
Самый глубокий блок с отступом с ключами: (["itemLink"], ["timestamp"], ["price"], ["wasKiosk"], ["покупатель")], ["гильдия"], ["продавец"], ["квант"], ["id"]) все там, но в другом, но последовательном порядке.
первый столбец каким-то образом приобретает начальный и конечный {}, которого нет в файле данных.
Возможно ли, что за кадром Google использует некоторыеLua-код, а затем он выполняет контекстно-зависимый анализ данных (понимает структуру данных), а затем повторно сериализуется в другом порядке?