Текстовый результат JOIN длиннее 50000 символов [duplicate]

Уникальный идентификатор устройства устройства Android OS в виде String с использованием TelephonyManager и ANDROID_ID получен:
String deviceId;
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTelephony.getDeviceId() != null) {
    deviceId = mTelephony.getDeviceId();
}
else {
    deviceId = Secure.getString(
                   getApplicationContext().getContentResolver(),
                   Secure.ANDROID_ID);
}

Но я настоятельно рекомендую метод, предложенный Google, см. Идентификация установок приложений .

4
задан jason 2 April 2014 в 01:37
поделиться

3 ответа

Оглядываясь назад на здесь , вы, возможно, можете вложить конкатенацию:

=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCAT(CONCATENATE('Monthly link'!A10:A&CHAR(13) , 
'Monthly link'!R10:R&CHAR(13)), CONCATENATE('Monthly link'!AG10:AG&CHAR(13) ,
'Monthly link'!AU10:AU&CHAR(13)) )), CHAR(13)))

Я просто добавил еще один CONCATENATE, чтобы объединить строки только с одним значением, затем используйте CONCAT, чтобы объединить их.

EDIT

Это не совсем исправление, но чтение документации Google гласит, что вы можете создать старую электронную таблицу

EDIT 2

Попробуйте этот код:

=TRANSPOSE(SPLIT(CONCAT(ARRAYFORMULA(CONCATENATE('Monthly link'!A10:A&CHAR(13), 
'Monthly link'!R10:R&CHAR(13))), ARRAYFORMULA(CONCATENATE(
'Monthly link'!AG10:AG&CHAR(13), 'Monthly link'!AU10:AU&CHAR(13)))), CHAR(13)))

Кажется, что ошибка исходит из ARRAYFORMULA ], имеет предел 50000. Не CONCATENATE или CONCAT. Таким образом, я использую CONCAT, чтобы объединить два разных ARRAYFORMULA s, которые содержат половину исходных данных. Вы можете продолжать разделять их до тех пор, пока не будет даже 4 ARRAYFORMULA s, если в этом случае будет только один набор данных.

EDIT 3

В настоящее время я работаю над реализацией функции в javascript найдено здесь .

Вы можете проверить его в настоящее время на Tools->Script editor->Paste, затем запустить его Tools->Script Manager->organizeData->Run.

Я продолжу работа на нем ... в настоящее время он не работает, но я близко;)

EDIT 4

Я закончил! Вы можете увидеть это здесь . Вам нужно создать новый скрипт, используя приведенные выше инструкции (Tools->Script editor->Paste), сохранить его, затем вы можете запустить его из окна редактора сценариев или из электронной таблицы, выполнив Tools->Script Manager->organizeData->Run.

Что сценарий does is получает данные из форм, помещает их в скопированные данные, тогда у него есть странное ограничение, когда для его копирования требуется буква в столбце, поэтому он добавляет письмо, чтобы скрипт заполнил строки с «undefined». Оттуда все строки имеют «undefined» в них, поэтому данные могут быть скопированы для всех из них.

Если вы хотите знать, как реализовать скрипт непосредственно в ячейке, вы можете просто положить :

=organizeData()

он вызывается пользовательской функцией! Подробнее см. здесь .

5
ответ дан Community 27 August 2018 в 06:36
поделиться

Не знаю, работает ли это, но может стоить того. Кто-то разместил это на форуме справки Документов Google.

/.../ If you want more than 50,000 characters in a single cell, you can use QUERY's header clause.

Example:

=ArrayFormula(query(row(A1:A70000),,100000))

This creates a cell with 408,893 characters. You can verify by using the LEN function.

Хорошо, я исправил вышеприведенную строку, как я думаю, это работает:

=ArrayFormula(query(A1:A100000,,100000))

Это предусмотрено, что у вас есть данные в столбце A, от строки 1 до строки 100000. Он будет конкатенировать все это. Я предполагаю, что максимальная длина составляет 100000 символов?

5
ответ дан Jonny 27 August 2018 в 06:36
поделиться

Мой ответ связан с другим аналогичным Q, отмеченным как duplicete:

Текстовый результат JOIN длиннее лимита в 50000 символов

My Решение состоит в использовании формулы:

=query(joinSplit(A2:A, ";"), "select Col1, count(Col1) group by Col1", 0)

, где joinSplit(A2:A, ";") является пользовательской формулой.

Код для вставки в редактор сценариев:

function joinSplit(column, delim)
{
  var result = [];
  var row = [];
  for (var i = 0, l = column.length; i < l; i++)
  {
    row = column[i].join(delim).split(delim);
    row.forEach( function(elt) { result.push([elt]); } ); 
  }  
  return result;
}

Он вернет столбец уникальных элементов.

Если данные:

A;B;C;D
D;D
E;F;A;A
G;A;B;C

Результатом является столбец:

A
B
C
D
D
D
E
F
A
A
G
A
B
C
0
ответ дан Max Makhrov 27 August 2018 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: