Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обход ограничения на кол-во символов в ячейке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Обход ограничения на кол-во символов в ячейке
Greedy Дата: Среда, 14.08.2019, 21:34 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Привет.
Имеется скрипт который через API торгового терминала выгружает данные о сделках. Скрипт выгружает все сделки в виде текста, в одну ячейку таблицы.
По каждой сделке передается множество параметров и получается так, что в связи с ограничением на 50000 символов в ячейке, через API я могу выгрузить не более 10 последних сделок.
Каждая сделка при этом разделена фигурными скобками, а параметры внутри сделки разделены запятыми.

Подскажите пожалуйста, каким образом можно выгружать данные которые приходят из API не в одну ячейку, а в разные, для каждой сделки? Используя фигурные скобки как разделитель сделок\ячеек. Тем самым обходя это ограничение на кол-во символов в одной ячейке и выгружая полную историю сделок разом.

Сейчас используется код такого вида:
[vba]
Код

function commas() {
  var key = 'api';
  var secret = 'secret';

  var baseUrl = "https://exchange.com";
  var endPoint = "/public/api/ver1/smart_trades";
  var pointParams = "?account_id=xxx&scope=finished";
  var queryString = endPoint + pointParams;
  var signature = Utilities.computeHmacSha256Signature(queryString, secret);
  signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

  var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
  };

  var data = UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText();
  Logger.log(data)
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("rates");
  var raw = sheet.getRange(13,1).setValue(data)
}
[/vba]


Сообщение отредактировал Greedy - Среда, 14.08.2019, 21:36
 
Ответить
СообщениеПривет.
Имеется скрипт который через API торгового терминала выгружает данные о сделках. Скрипт выгружает все сделки в виде текста, в одну ячейку таблицы.
По каждой сделке передается множество параметров и получается так, что в связи с ограничением на 50000 символов в ячейке, через API я могу выгрузить не более 10 последних сделок.
Каждая сделка при этом разделена фигурными скобками, а параметры внутри сделки разделены запятыми.

Подскажите пожалуйста, каким образом можно выгружать данные которые приходят из API не в одну ячейку, а в разные, для каждой сделки? Используя фигурные скобки как разделитель сделок\ячеек. Тем самым обходя это ограничение на кол-во символов в одной ячейке и выгружая полную историю сделок разом.

Сейчас используется код такого вида:
[vba]
Код

function commas() {
  var key = 'api';
  var secret = 'secret';

  var baseUrl = "https://exchange.com";
  var endPoint = "/public/api/ver1/smart_trades";
  var pointParams = "?account_id=xxx&scope=finished";
  var queryString = endPoint + pointParams;
  var signature = Utilities.computeHmacSha256Signature(queryString, secret);
  signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

  var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
  };

  var data = UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText();
  Logger.log(data)
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("rates");
  var raw = sheet.getRange(13,1).setValue(data)
}
[/vba]

Автор - Greedy
Дата добавления - 14.08.2019 в 21:34
krosav4ig Дата: Четверг, 15.08.2019, 07:47 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
тупо делим на куски по 5к символов
[vba]
Код
function commas() {
var key = 'api';
var secret = 'secret';

var baseUrl = "https://exchange.com";
var endPoint = "/public/api/ver1/smart_trades";
var pointParams = "?account_id=xxx&scope=finished";
var queryString = endPoint + pointParams;
var signature = Utilities.computeHmacSha256Signature(queryString, secret);
signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
};

var data = chunk(UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText(),5000);
Logger.log(data)
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("rates");
var raw = sheet.getRange(13,1).offset(0, 0, data.length).setValue(data)
}
function chunk(a,b){
  return Array.apply(null, new Array(Math.ceil(a.length/b))).
  map(function (c, d) {return [a.substr(d*b,b)];});
}
[/vba]или делим строку по скобкам [vba]
Код
var data = BtwBraces(UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText());
[/vba]
[vba]
Код
function BtwBraces(a){
  return a.split(/[{}]/g).
  filter(function(a){return a;}).
  map(function (a){return [a];})
}
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 15.08.2019, 07:47
 
Ответить
Сообщениетупо делим на куски по 5к символов
[vba]
Код
function commas() {
var key = 'api';
var secret = 'secret';

var baseUrl = "https://exchange.com";
var endPoint = "/public/api/ver1/smart_trades";
var pointParams = "?account_id=xxx&scope=finished";
var queryString = endPoint + pointParams;
var signature = Utilities.computeHmacSha256Signature(queryString, secret);
signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
};

var data = chunk(UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText(),5000);
Logger.log(data)
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("rates");
var raw = sheet.getRange(13,1).offset(0, 0, data.length).setValue(data)
}
function chunk(a,b){
  return Array.apply(null, new Array(Math.ceil(a.length/b))).
  map(function (c, d) {return [a.substr(d*b,b)];});
}
[/vba]или делим строку по скобкам [vba]
Код
var data = BtwBraces(UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText());
[/vba]
[vba]
Код
function BtwBraces(a){
  return a.split(/[{}]/g).
  filter(function(a){return a;}).
  map(function (a){return [a];})
}
[/vba]

Автор - krosav4ig
Дата добавления - 15.08.2019 в 07:47
Greedy Дата: Четверг, 15.08.2019, 18:48 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Спасибо за ответ.

В первом варианте выдает 200 одинаковых строк с первыми 5000 символов сделок из API. т.е. в каждую новую строку вставляет первую и последующие сделки в одинаковом порядке.
Во втором варианте появляется 1500 одинаковых строк с единственным символом [ внутри.
 
Ответить
СообщениеСпасибо за ответ.

В первом варианте выдает 200 одинаковых строк с первыми 5000 символов сделок из API. т.е. в каждую новую строку вставляет первую и последующие сделки в одинаковом порядке.
Во втором варианте появляется 1500 одинаковых строк с единственным символом [ внутри.

Автор - Greedy
Дата добавления - 15.08.2019 в 18:48
krosav4ig Дата: Пятница, 16.08.2019, 00:12 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
какая у вас структура данных?
написал себе для для теста
[vba]
Код
function myFunction() {
    var ss = SpreadsheetApp.getActive();
    var sheet = ss.getSheetByName("Лист1");
    var data = BtwBraces(Array.apply(null, Array(3000)).reduce(function(a, b) {
        return a + "{" + Array.apply(null, Array(Math.floor(Math.random() * 20) + 1)).reduce(function(a, b) {
            a.push("\"" + Array.apply(null, Array(2)).reduce(function(a, b) {
                a.push(Math.random(this).toString(36).slice(2, Math.floor(Math.random() * 10) + 3));
                return a
            }, []).join("\":\"") + "\"");
            return a
        }, []).join(",") + "}"
    }, ""));
    var raw = sheet.getRange(1, 1).offset(0, 0, data.length).setValues(data);
}
function BtwBraces(a) {
    return a.split(/[{}]/g).
    filter(function(a) {return a}).
    map(function(a) {return [a]})
}
[/vba]
все нормально отабатвает


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Пятница, 16.08.2019, 00:14
 
Ответить
Сообщениекакая у вас структура данных?
написал себе для для теста
[vba]
Код
function myFunction() {
    var ss = SpreadsheetApp.getActive();
    var sheet = ss.getSheetByName("Лист1");
    var data = BtwBraces(Array.apply(null, Array(3000)).reduce(function(a, b) {
        return a + "{" + Array.apply(null, Array(Math.floor(Math.random() * 20) + 1)).reduce(function(a, b) {
            a.push("\"" + Array.apply(null, Array(2)).reduce(function(a, b) {
                a.push(Math.random(this).toString(36).slice(2, Math.floor(Math.random() * 10) + 3));
                return a
            }, []).join("\":\"") + "\"");
            return a
        }, []).join(",") + "}"
    }, ""));
    var raw = sheet.getRange(1, 1).offset(0, 0, data.length).setValues(data);
}
function BtwBraces(a) {
    return a.split(/[{}]/g).
    filter(function(a) {return a}).
    map(function(a) {return [a]})
}
[/vba]
все нормально отабатвает

Автор - krosav4ig
Дата добавления - 16.08.2019 в 00:12
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!