How to separate multiple columns from a range in an array?












0














I have a range of data in a Google Sheet and I want to store that data into an array using the app script. At the moment I can bring in the data easily enough and put it into an array with this code:



  var sheetData = sheet.getSheetByName('Fruit').getRange('A1:C2').getValues()


However, this puts each row into an array. For example, [[Apple,Red,Round],[Banana,Yellow,Long]].



How can I arrange the array by columns so it would look: [[Apple,Banana],[Red,Yellow],[Round,Long]].



Thanks.










share|improve this question



























    0














    I have a range of data in a Google Sheet and I want to store that data into an array using the app script. At the moment I can bring in the data easily enough and put it into an array with this code:



      var sheetData = sheet.getSheetByName('Fruit').getRange('A1:C2').getValues()


    However, this puts each row into an array. For example, [[Apple,Red,Round],[Banana,Yellow,Long]].



    How can I arrange the array by columns so it would look: [[Apple,Banana],[Red,Yellow],[Round,Long]].



    Thanks.










    share|improve this question

























      0












      0








      0







      I have a range of data in a Google Sheet and I want to store that data into an array using the app script. At the moment I can bring in the data easily enough and put it into an array with this code:



        var sheetData = sheet.getSheetByName('Fruit').getRange('A1:C2').getValues()


      However, this puts each row into an array. For example, [[Apple,Red,Round],[Banana,Yellow,Long]].



      How can I arrange the array by columns so it would look: [[Apple,Banana],[Red,Yellow],[Round,Long]].



      Thanks.










      share|improve this question













      I have a range of data in a Google Sheet and I want to store that data into an array using the app script. At the moment I can bring in the data easily enough and put it into an array with this code:



        var sheetData = sheet.getSheetByName('Fruit').getRange('A1:C2').getValues()


      However, this puts each row into an array. For example, [[Apple,Red,Round],[Banana,Yellow,Long]].



      How can I arrange the array by columns so it would look: [[Apple,Banana],[Red,Yellow],[Round,Long]].



      Thanks.







      multidimensional-array google-apps-script google-sheets






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked yesterday









      Ajay Ubhi

      52




      52
























          2 Answers
          2






          active

          oldest

          votes


















          1














          It looks like you have to transpose the array. You can create a function



          function transpose(data) {

          return (data[0] || ).map (function (col , colIndex) {
          return data.map (function (row) {
          return row[colIndex];
          });
          });
          }


          and then pass the values obtained by .getValues() to that function..



          var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())


          and check the log. See if that works for you?






          share|improve this answer





















          • Thank you, worked perfectly!
            – Ajay Ubhi
            yesterday



















          0














          Use the Google Sheets API, which allows you to specify the primary dimension of the response. To do so, first you must enable the API and the advanced service



          To acquire values most efficiently, use the spreadsheets.values endpoints, either get or batchGet as appropriate. You are able to supply optional arguments to both calls, and one of which controls the orientation of the response:



          const wb = SpreadsheetApp.getActive();
          const valService = Sheets.Spreadsheets.Values;
          const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
          const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

          var sheet = wb.getSheetByName("some name");
          var rgPrefix = "'" + sheet.getName() + "'!";

          // spreadsheetId, range string, {optional arguments}
          var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
          var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

          // spreadsheetId, {other arguments}
          var batchAsCols = valService.batchGet(wb.getId(), {
          ranges: [
          rgPrefix + "A1:C30",
          rgPrefix + "J8",
          ...
          ],
          majorDimension: SpreadsheetApp.Dimension.COLUMNS
          });
          console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});


          The reply will either be a ValueRange (using get) or an object wrapping several ValueRanges (if using batchGet). You can access the data (if any was present) at the ValueRange's values property. Note that trailing blanks are omitted.



          You can find more information in the Sheets API documentation, and other relevant Stack Overflow questions such as this one.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944062%2fhow-to-separate-multiple-columns-from-a-range-in-an-array%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            It looks like you have to transpose the array. You can create a function



            function transpose(data) {

            return (data[0] || ).map (function (col , colIndex) {
            return data.map (function (row) {
            return row[colIndex];
            });
            });
            }


            and then pass the values obtained by .getValues() to that function..



            var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())


            and check the log. See if that works for you?






            share|improve this answer





















            • Thank you, worked perfectly!
              – Ajay Ubhi
              yesterday
















            1














            It looks like you have to transpose the array. You can create a function



            function transpose(data) {

            return (data[0] || ).map (function (col , colIndex) {
            return data.map (function (row) {
            return row[colIndex];
            });
            });
            }


            and then pass the values obtained by .getValues() to that function..



            var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())


            and check the log. See if that works for you?






            share|improve this answer





















            • Thank you, worked perfectly!
              – Ajay Ubhi
              yesterday














            1












            1








            1






            It looks like you have to transpose the array. You can create a function



            function transpose(data) {

            return (data[0] || ).map (function (col , colIndex) {
            return data.map (function (row) {
            return row[colIndex];
            });
            });
            }


            and then pass the values obtained by .getValues() to that function..



            var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())


            and check the log. See if that works for you?






            share|improve this answer












            It looks like you have to transpose the array. You can create a function



            function transpose(data) {

            return (data[0] || ).map (function (col , colIndex) {
            return data.map (function (row) {
            return row[colIndex];
            });
            });
            }


            and then pass the values obtained by .getValues() to that function..



            var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())


            and check the log. See if that works for you?







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered yesterday









            JPV

            10.6k21525




            10.6k21525












            • Thank you, worked perfectly!
              – Ajay Ubhi
              yesterday


















            • Thank you, worked perfectly!
              – Ajay Ubhi
              yesterday
















            Thank you, worked perfectly!
            – Ajay Ubhi
            yesterday




            Thank you, worked perfectly!
            – Ajay Ubhi
            yesterday













            0














            Use the Google Sheets API, which allows you to specify the primary dimension of the response. To do so, first you must enable the API and the advanced service



            To acquire values most efficiently, use the spreadsheets.values endpoints, either get or batchGet as appropriate. You are able to supply optional arguments to both calls, and one of which controls the orientation of the response:



            const wb = SpreadsheetApp.getActive();
            const valService = Sheets.Spreadsheets.Values;
            const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
            const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

            var sheet = wb.getSheetByName("some name");
            var rgPrefix = "'" + sheet.getName() + "'!";

            // spreadsheetId, range string, {optional arguments}
            var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
            var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

            // spreadsheetId, {other arguments}
            var batchAsCols = valService.batchGet(wb.getId(), {
            ranges: [
            rgPrefix + "A1:C30",
            rgPrefix + "J8",
            ...
            ],
            majorDimension: SpreadsheetApp.Dimension.COLUMNS
            });
            console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});


            The reply will either be a ValueRange (using get) or an object wrapping several ValueRanges (if using batchGet). You can access the data (if any was present) at the ValueRange's values property. Note that trailing blanks are omitted.



            You can find more information in the Sheets API documentation, and other relevant Stack Overflow questions such as this one.






            share|improve this answer




























              0














              Use the Google Sheets API, which allows you to specify the primary dimension of the response. To do so, first you must enable the API and the advanced service



              To acquire values most efficiently, use the spreadsheets.values endpoints, either get or batchGet as appropriate. You are able to supply optional arguments to both calls, and one of which controls the orientation of the response:



              const wb = SpreadsheetApp.getActive();
              const valService = Sheets.Spreadsheets.Values;
              const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
              const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

              var sheet = wb.getSheetByName("some name");
              var rgPrefix = "'" + sheet.getName() + "'!";

              // spreadsheetId, range string, {optional arguments}
              var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
              var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

              // spreadsheetId, {other arguments}
              var batchAsCols = valService.batchGet(wb.getId(), {
              ranges: [
              rgPrefix + "A1:C30",
              rgPrefix + "J8",
              ...
              ],
              majorDimension: SpreadsheetApp.Dimension.COLUMNS
              });
              console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});


              The reply will either be a ValueRange (using get) or an object wrapping several ValueRanges (if using batchGet). You can access the data (if any was present) at the ValueRange's values property. Note that trailing blanks are omitted.



              You can find more information in the Sheets API documentation, and other relevant Stack Overflow questions such as this one.






              share|improve this answer


























                0












                0








                0






                Use the Google Sheets API, which allows you to specify the primary dimension of the response. To do so, first you must enable the API and the advanced service



                To acquire values most efficiently, use the spreadsheets.values endpoints, either get or batchGet as appropriate. You are able to supply optional arguments to both calls, and one of which controls the orientation of the response:



                const wb = SpreadsheetApp.getActive();
                const valService = Sheets.Spreadsheets.Values;
                const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
                const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

                var sheet = wb.getSheetByName("some name");
                var rgPrefix = "'" + sheet.getName() + "'!";

                // spreadsheetId, range string, {optional arguments}
                var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
                var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

                // spreadsheetId, {other arguments}
                var batchAsCols = valService.batchGet(wb.getId(), {
                ranges: [
                rgPrefix + "A1:C30",
                rgPrefix + "J8",
                ...
                ],
                majorDimension: SpreadsheetApp.Dimension.COLUMNS
                });
                console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});


                The reply will either be a ValueRange (using get) or an object wrapping several ValueRanges (if using batchGet). You can access the data (if any was present) at the ValueRange's values property. Note that trailing blanks are omitted.



                You can find more information in the Sheets API documentation, and other relevant Stack Overflow questions such as this one.






                share|improve this answer














                Use the Google Sheets API, which allows you to specify the primary dimension of the response. To do so, first you must enable the API and the advanced service



                To acquire values most efficiently, use the spreadsheets.values endpoints, either get or batchGet as appropriate. You are able to supply optional arguments to both calls, and one of which controls the orientation of the response:



                const wb = SpreadsheetApp.getActive();
                const valService = Sheets.Spreadsheets.Values;
                const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
                const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

                var sheet = wb.getSheetByName("some name");
                var rgPrefix = "'" + sheet.getName() + "'!";

                // spreadsheetId, range string, {optional arguments}
                var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
                var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

                // spreadsheetId, {other arguments}
                var batchAsCols = valService.batchGet(wb.getId(), {
                ranges: [
                rgPrefix + "A1:C30",
                rgPrefix + "J8",
                ...
                ],
                majorDimension: SpreadsheetApp.Dimension.COLUMNS
                });
                console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});


                The reply will either be a ValueRange (using get) or an object wrapping several ValueRanges (if using batchGet). You can access the data (if any was present) at the ValueRange's values property. Note that trailing blanks are omitted.



                You can find more information in the Sheets API documentation, and other relevant Stack Overflow questions such as this one.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited yesterday

























                answered yesterday









                tehhowch

                4,8304823




                4,8304823






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944062%2fhow-to-separate-multiple-columns-from-a-range-in-an-array%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas