Есть ли способ разделить столбец по фиксированной ширине через скрипт?Попытка разобрать данные - PullRequest
0 голосов
/ 18 июня 2019

Вот ссылка на образец электронной таблицы с 2 вкладками, одна для вывода моих данных, а другая для желаемого результата

Я импортирую текстовые данные в таблицы и мне нужно разделитьэто через определенную фиксированную ширину.Я знаю предел ширины столбца, в котором я пытаюсь определить разрывы столбцов , поскольку данные не будут шире, чем для каждого столбца, однако у него нет согласованного разделителя.

Я делал это ранее в Excel, используя следующий код VBA:

Workbooks.OpenText Filename:=sFileName, Origin:=437, StartRow:=41, 
DataType:=xlFixedWidth, FieldInfo:=Array( _
    Array(0, 1), _
    Array(23, 1), _
    Array(34, 1), _
    Array(59, 1), _
    Array(70, 1), _
    Array(79, 1), _
    Array(87, 1), _
    Array(98, 1), _
    Array(114, 1), _
    Array(123, 1)), _
    TrailingMinusNumbers:=True

У меня есть настройка кода для вставки текстового файла в рабочую книгу, и я попытался разделить, используя SLICEфункция, но она выдала ошибку, что диапазон имел ~ 4000 строк, по данным было 0 строк, поэтому он не мог сгенерировать.

function importTXTfromDrive() {

  var fileName = Browser.inputBox("Enter the name of the text file in your 
Google Drive to import (e.g. myFile.csv):");

  var searchTerm = "title = '"+fileName+"'";

  var files = DriveApp.searchFiles(searchTerm)
  var csvFile = "";


  while (files.hasNext()) {
    var file = files.next();
    if (file.getName() == fileName) {
        csvFile = file.getBlob().getDataAsString();
    break;
    }
  }

  var csvData = Utilities.parseCsv(csvFile);
  ////var col1 = csvData.slice(23,1);
  ////This didn't work so I removed it for now
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  if (ss.getSheetByName(fileName) != null){
   Browser.msgBox("That file has already been opened");
    return 0;
  }

  var create = ss.insertSheet(fileName);

  create.getRange(1, 1, csvData.length, 
csvData[0].length).setValues(csvData); 

////create.getRange(1, 1, csvData.length, 
////csvData[0].length).setValues(col1); 
////This last line was a test in using the SLICE but gave an error  
}

1 Ответ

1 голос
/ 20 июня 2019

Вот отправная точка. Вероятно, есть некоторая обрезка и, возможно, некоторое преобразование строк в числа, но это охватывает основной анализ.

function so5665682501() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "DataOutputTest";
  var sheet = ss.getSheetByName(sheetname);
  var LR = sheet.getLastRow();
  var range = sheet.getRange(1, 1, LR);
  //Logger.log("DEBUG: range: "+range.getA1Notation());
  var values = range.getValues();

  var startrow = 4;
  var outputrange = sheet.getRange(startrow,9, LR-startrow,9); 
  var output = []


  for (var i=startrow-1;i<LR;i++){
    var outputrow=[];
    var acctname = values[i][0].substring(0,23);
    var acctcode = values[i][0].substring(24,34);
    var acctline = values[i][0].substring(35,59);
    var acctdate = values[i][0].substring(60,70);
    var acctordered = values[i][0].substring(71,79);
    var acctshipped = values[i][0].substring(80,87);
    var acctcarrier= values[i][0].substring(88,98);
    var acctnumber1= values[i][0].substring(99,114);
    var acctnumber2= values[i][0].substring(115,123);
    var acctdate2= values[i][0].substring(124,133);
    // Logger.log("DEBUG: acctname:"+acctname+",acctcode:"+acctcode+",acctline:"+acctline+",acctdate:"+acctdate+"\n, acctordered:"+acctordered+",acctshipped:"+acctshipped+",acctcarrier:"+acctcarrier+",acctnumber1:"+acctnumber1+",acctnumber2:"+acctnumber2+",acctdate2:"+acctdate2);
    outputrow.push(acctname);
    outputrow.push(acctcode);
    outputrow.push(acctline);
    outputrow.push(acctdate);
    outputrow.push(acctordered);
    outputrow.push(acctdate);
    outputrow.push(acctcarrier);
    outputrow.push(acctnumber1); 
    outputrow.push(acctnumber2); 
    outputrow.push(acctdate2); 
    output.push(outputrow);
  }
  var outputrange = sheet.getRange(startrow,9, LR-startrow+1,10);
  outputrange.setValues(output);
}

ДО (одна колонка)

Screenshot-BEFORE

ПОСЛЕ (десять столбцов)

Screenshot-after

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...