Google स्प्रेडशीट में कॉलम रूपांतरण का पाठ


32

आप Google स्प्रेडशीट में टेक्स्ट-टू-कॉलम रूपांतरण कैसे करते हैं?

उदाहरण के लिए, मेरे पास एक सेल में निम्नलिखित डेटा स्ट्रिंग है:

5,233,6,2,6,7,2,2,6,6

मैं इसे स्तंभों में अल्पविराम विभाजक द्वारा अलग करना चाहता हूं।

संपादित करें: मैंने स्वीकार किए गए उत्तर को एक में बदल दिया है जो Google Apps स्क्रिप्टिंग का उपयोग नहीं करता है क्योंकि Google लगता है कि यह क्षमता है।


आपने google-apps-script टैग क्यों जोड़ा है? क्या उत्तर सही थे?
जेकब जान टुंस्ट्रा

1
@JacobJanTuinstra क्योंकि क्षमता को Google Apps स्क्रिप्टिंग के माध्यम से जोड़ा जा सकता है। मैंने 'टेक्स्ट टू कॉलम' स्क्रिप्ट लिखकर अपनी समस्या को हल किया जो अब स्क्रिप्ट गैलरी में पाई जा सकती है। Googlegooru ने भी अपने उपयोग को प्रदर्शित करते हुए एक वीडियो ट्यूटोरियल पोस्ट किया है यहाँ googlegooru.com/text-columns-google-spreadsheets
इवान प्लाइस

Google स्प्रेडशीट द्वारा पहले से उपलब्ध समाधान के लिए क्या अंतर है SPLIT:। कि मूल्य निर्धारित हैं? आप उन मूल्यों को पेस्ट कर सकते हैं जिन्हें आप जानते हैं।
जैकब जान तुइस्ट्रा

@JacobJanTuinstra अपने पहले समाधान में B2 को B3 पर कॉपी करने का प्रयास करें। परिणाम कोशिकाओं में निरंतरता सूत्र होते हैं, कच्चे डेटा नहीं। स्क्रिप्ट से आउटपुट किए गए सेल में वास्तविक कच्चे डेटा होते हैं ताकि उन्हें बिना किसी समस्या के कॉपी / स्थानांतरित किया जा सके। इस प्रश्न का आशय एक्सेल के 'टेक्स्ट टू कॉलम ’फीचर के बराबर है। जब तक, Google आधिकारिक तौर पर स्क्रिप्ट का समर्थन करता है, वह उतना ही करीब है जितना कि यह मिलने वाला है।
इवान प्लाइस

1
@ रूबेंस स्थिरता के लिए बहुत कुछ। मैंने पहले जांच की और इस धारणा के तहत कि स्क्रिप्टिंग पूरी तरह से चली गई थी। पता चला, उन्होंने केवल स्क्रिप्ट गैलरी को मार डाला। मैं आपके द्वारा सुझाए गए उत्तर के साथ जा रहा हूं क्योंकि यह सबसे सरल स्क्रिप्ट योग्य समाधान है। प्रतिक्रिया के लिए धन्यवाद।
इवान प्लाइस

जवाबों:


14

अनुसरण सूत्र बस यही करेगा; पाठ से स्तंभ:

A1=5,233,6,2,6,7,2,2,6,6
A2=SPLIT(A1;",")

और अगला; पाठ से पंक्ति:

A1=5,233,6,2,6,7,2,2,6,6
A2=TRANSPOSE(SPLIT(A1;","))

अद्यतन 03-02-2013
यदि आप परिणामों को विभाजित करते हैं A1और मूल्यों को चिपकाते हैं, तो यह ओपी के उत्तर में प्रयुक्त कोड की सभी पंक्तियों के समान परिणाम देगा। मैंने इसे Google Apps स्क्रिप्ट के साथ-साथ इस पर एक शॉट दिया और यही मैंने बनाया है: टेक्स्ट टू कॉलम

function mySplit() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = sh.getActiveCell().getValues()[0];
  var sCell = cell[0].split(",");
  var row = sh.getActiveCell().getRowIndex();
  var col = sh.getActiveCell().getColumnIndex();

  sh.getRange(row,col+1,1,sCell.length).setValues([sCell]);  
}

मैं परिणाम को विभाजित करने और इसे शीट में जोड़ने के लिए बिल्ड-इन स्प्लिट फ़ंक्शन का सरल उपयोग करता हूं, इससे अधिक और कुछ भी कम नहीं।


अच्छा ... आप इसे यूआई का विस्तार किए बिना कैसे कॉल कर सकते हैं। क्या आप उपयोग को प्रदर्शित करते हुए एक त्वरित उदाहरण जोड़ सकते हैं?
इवान प्लाइस

17

UI का विस्तार करने के लिए Google Apps स्क्रिप्टिंग का लाभ उठाएं

टेक्स्ट टू कॉलम, एक बहुत ही उपयोगी सुविधा है और एक कारण है कि बहुत सारे Google स्प्रेडशीट उपयोगकर्ता एक्सेल का उपयोग करने के लिए वापस जाते हैं। जब तक, Google आधिकारिक तौर पर इस सुविधा का समर्थन करने का निर्णय लेता है, तब तक इस समाधान को कार्यक्षमता में जोड़ने के लिए पॉलीफिल के रूप में उपयोग किया जा सकता है।

यहाँ कोड है:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({ name:"Text to columns", functionName:"textToColumns" });
  menuEntries.push({ name:"Text to columns (custom separator)", functionName:"textToColumnsCustom" });
  menuEntries.push(null);
  menuEntries.push({ name:"Columns to Text", functionName:"columnsToText" });
  menuEntries.push({ name:"Columns to Text (custom separator)", functionName:"columnsToTextCustom" });
  ss.addMenu("Advanced", menuEntries);
}

function textToColumnsCustom() {
  var separator = Browser.inputBox("Text to column","Enter the the separator",Browser.Buttons.OK);
  textToColumns(separator);
}

function columnsToTextCustom() {
  var separator = Browser.inputBox("Column to text","Enter the the separator",Browser.Buttons.OK);
  columnsToText(separator);
}

// Expands a single cell of CSV formatted text to multiple columns
function textToColumns(separator) {
  var sep = typeof(separator) !== 'undefined' ? separator : ',';
  var ss = SpreadsheetApp.getActiveSheet(); 
  var r = ss.getActiveRange();
  // check that only one column was selected
  var col = r.getColumn(); 
  if(col !== r.getLastColumn()) {
    Browser.msgBox("Error", "Invalid selection, too many columns.", Browser.Buttons.OK);
    return;
  }  
  var firstRow = r.getRow();
  // short cut the one row selection
  if(firstRow === r.getLastRow()) {
    var values = r.getValues().toString().split(sep);
    ss.getRange(firstRow,col+1,1,values.length).setValues(new Array(values));
    return;
  } else {
    var rows = r.getValues();
    var values = [];
    var cols = 0;
    for(var i = 0, len = rows.length; i < len; i++) {
      var rowValues = rows[i].toString().split(sep); 
      var rowValuesLen = rowValues.length;
      if(cols < rowValuesLen) { cols = rowValuesLen; }
      values.push(rowValues);
    }
    // set all values at once (padding required because setValues doesn't accept jagged 2d arrays)
    padRow(values, cols);
    ss.getRange(firstRow,col+1,values.length,cols).setValues(values);
  }
}

// Pads a row with empty values to the specified length
function padRow(array, length) {
  for(var i = 0; i < array.length; i++) {
    var arrLen = array[i].length;
    if(arrLen < length) {
      var padLen = length - arrLen;
      var padding = new Array(padLen);
      array[i].push.apply(array[i], padding);
      for(var j = 0, len = array[i].length; j < len; j++) {
        if(typeof(array[i][j]) === 'undefined') {
          array[i][j] = "";
        }
      }
    }
  }
  return array;
}

function columnsToText(separator) {
  var sep = typeof(separator) !== 'undefined' ? separator : ',';
  var ss = SpreadsheetApp.getActiveSheet(); 
  var r = ss.getActiveRange();
  var col = r.getColumn();  
  var firstRow = r.getRow();
  var rows = r.getValues();
  var values = [];
  for(var i = 0, len = rows.length; i < len; i++) {
    var value = rows[i].join(sep);
    values[i] = [value];
  }
  col -= 1;
  ss.getRange(firstRow,col,values.length,1).setValues(values);
}

स्क्रिप्ट संपादक को सहेजें और बंद करें। फिर, स्प्रेडशीट ताज़ा करें। इसे लोड करने में एक सेकंड लगेगा लेकिन आपको टूलबार में 'सहायता' के बाद 'उन्नत' पॉपअप नामक एक मेनू देखना चाहिए।

उपयोग:

  • विभाजित करने के लिए मानों वाले सेल का चयन करें
  • स्तंभों के लिए उन्नतटेक्स्ट का चयन करें

बस। आप एक कस्टम सीमांकक ('पाठ से कॉलम (कस्टम)' तक) और प्रक्रिया को उल्टा ('कॉलम से पाठ') का उपयोग करके भी विभाजित कर सकते हैं।


मैं सिर्फ लिपियों गैलरी से इसे स्थापित किया है और यह काम नहीं कर रहा था। मैंने इसे टूल → स्क्रिप्ट मैनेजर → एडिट बटन पर जाकर तय किया और प्रत्येक फंक्शन डेफिनिशन के ब्रेस के बाद सेमी-कोलोन जोड़ दिया। स्क्रिप्ट के लिए धन्यवाद।
बॉब एस्पोनाजा

@bobesponja हेड-अप के लिए धन्यवाद। मुझे पता है कि Google स्क्रिप्ट के साथ एक बग है जहां आयातित स्क्रिप्ट से घटना ट्रिगर ठीक से पंजीकृत नहीं होती है। इसे ठीक करने के लिए, बस मैन्युअल रूप से ऑनऑन ट्रिगर जोड़ें।
इवान प्लाइस

मैं इसे स्क्रिप्ट गैलरी में नहीं देखता। क्या यह अब भी है?
एलेन स्पार्टस

1
@espertus लगता है कि Google को उनकी नई ऐड-ऑन चीज़ के पक्ष में स्क्रिप्ट गैलरी से छुटकारा मिल गया। बस एक स्क्रिप्ट में कोड को कॉपी करें, बंद करें, फिर दस्तावेज़ को फिर से खोलें और इसे काम करना चाहिए।
इवान प्लाइस

कुछ किनारे मामले हैं जहां यह काम नहीं कर रहा है। 1,421,873,190,017,370,000,000,000 1.42E+24 उस सीएसवी लाइन को 9 कॉलमों में विभाजित किया जाना चाहिए था, लेकिन यह सिर्फ 1 में विभाजित किया गया था
हेवक्लेक्टेड

3

मैंने स्प्लिट फ़ंक्शन का उपयोग किया है, और यह पूरी तरह से काम करता है, क्योंकि यह जारी फॉर्मूला का भी उपयोग करता है और यह उचित ए रिक्ति के साथ कॉलम ए से कॉलम बीसीडीई पर टेक्स्ट से बिल्कुल अनुवाद करता है।

मेरा उदाहरण:

Cell A1= text1, text2, date1, number1
Cell B1= split(A1,",")

B1 में आउटकम text1 है। C1 में आउटकम text2 है। D1 में आउटकम तारीख 1 है। E1 में आउटकम नंबर 1 है।

यह प्रारूप का ख्याल रखता है, क्योंकि तारीख को 1-जून के रूप में लिखा गया था, और इसका अनुवाद 01/06 को किया गया था।

सूत्रों को कोशिकाओं में इस्तेमाल विभाजित BCDE जहां CONTINUE(B1; 1; 2), CONTINUE(B1; 1; 3), CONTINUE(B1; 1; 4)। इस भाग के सभी स्वचालित रूप से बनाया गया था।


2
क्या यह एक टिप्पणी या एक समाधान है?
जैकब जान टुंस्ट्रा

2

अपने सीएसवी डेटा को tsv (टैब अलग किए गए मान) में परिवर्तित करें।
इसके बाद पेस्ट करें।


मैंने बस कोशिश की कि नियमित पेस्ट के साथ, काम नहीं किया। ब्राउज़र की "पेस्ट एंड मैच स्टाइल" के साथ काम करना (Chrome / MacOS) काम करता है
ned

1
एक साधारण ctrl + v के साथ मेरे लिए पूरी तरह से काम किया। यह अब तक का सबसे सरल उपाय लगता है!
दीदीयर एल

1

मैं वास्तव में एप्स स्क्रिप्ट का उपयोग करके इवान के उत्तर को पसंद करता हूं, और एक छोटा सुधार किया है: नियमित अभिव्यक्ति सीमांकक मिलान के लिए समर्थन जोड़ना। मेनू में मेनू पर मैंने जोड़ा:

menuEntries.push({
  name: "Text to columns (regular expression separator)",
  functionName:"textToColumnsRegExp"
});

और संदर्भित फ़ंक्शन जोड़ा गया:

function textToColumnsRegExp() {
  var separator = Browser.inputBox(
    "Text to column",
    "Enter the regular expression for the separator ",
    Browser.Buttons.OK);
  if (separator) {
    textToColumns(new RegExp(separator));
  }
}

कोई अन्य परिवर्तन की आवश्यकता नहीं थी क्योंकि इवान जावास्क्रिप्ट के String.prototyp.split का उपयोग कर रहा है, जो या तो एक स्ट्रिंग या एक RegExp ऑब्जेक्ट को सीमांकक के रूप में स्वीकार करता है। तो कुडोस द इवान!


0

इसके अलावा, SPLIT फ़ंक्शन का उपयोग करने के बाद, जो सरणी को अलग-अलग मान प्रदान करेगा, आप INDEX फ़ंक्शन के साथ इस सरणी से एक विशिष्ट पंक्ति या स्तंभ को अलग कर सकते हैं:

=index(split(importXML("https://www.google.com/search?q=stackexchange","//div[@id='resultStats']/text()")," "),1,2,1)

उदाहरण के लिए Google क्वेरी के लिए परिणामों की संख्या प्राप्त करने के लिए उपयोगी हो सकता है


0

एक मेनू आइटम प्रतीत होता है जो इसके साथ मदद कर सकता है: डेटा → स्तंभों को टेक्स्ट विभाजित करें ...

  1. सेल पर सिंगल क्लिक करें और अपना डेटा पेस्ट करें।

    यह कई पंक्तियों पर दिखाई देगा लेकिन केवल एक कॉलम।

  2. नई आबादी वाली कोशिकाओं को छोड़कर, मेनू पर जाएं डेटा → कॉलमों को टेक्स्ट विभाजित करें ...

    यदि एप्लिकेशन आपके विभाजकों का स्वत: पता लगाने में कामयाब रहा, तो बधाई: आप कर रहे हैं!

    अन्यथा, एक छोटा विजेट यह पूछेगा कि आप किस विभाजक को विभाजित करना चाहते हैं।

    नोट: यह विजेट विंडो के निचले भाग के पास दिखाई दे सकता है जिससे इसे ढूंढना थोड़ा मुश्किल हो जाता है!

  3. यह देखने के लिए कि आपका डेटा किस विभाजक द्वारा चुना गया है, कॉम्मा, सेमीकोलन, अवधि, स्थान या कस्टम: विजेट का उपयोग करें।

  4. यदि आप टैब पर विभाजित करना चाहते हैं:

आप नहीं कर सकते!


-1

और स्तम्भो के समतुल्य =JOIN(delim, array)सूत्र का उपयोग करना होगा । उदाहरण के लिए, =JOIN(",", A1:A10)यह A1 A1 के माध्यम से कोशिकाओं से मानों की स्ट्रिंग को बदल देगा।


1
यह सच है, लेकिन ओपी ने कहा कि इसमें एक सेल में मान (अल्पविराम अलग) था।
जैकब जान टुंस्ट्रा

उपयोगी जानकारी, लेकिन शायद मुझे लगता है कि विभाजन के लिए एक उत्तर के तहत एक टिप्पणी के रूप में पोस्ट किया गया। चूंकि यह मूल प्रश्न का उत्तर नहीं देता है।
डेविड

-1

Google स्प्रेडशीट के नए संस्करण के साथ, अब Google App लिपियों को पदावनत कर दिया गया है

आप Google ऐड-ऑन गैलरी के पावर टूल्स का उपयोग कर सकते हैं और स्प्लिट फ़ंक्शन का उपयोग कर सकते हैं। यह अच्छा काम करता है।


जीएएस पदावनत नहीं है। यह स्क्रिप्ट गैलरी है जिसे ऐड-ऑन स्टोर द्वारा प्रतिस्थापित किया जा रहा है !!
जैकब जान तुइस्ट्रा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.