Appending google spreadsheet arrays

陌路散爱 提交于 2019-11-29 22:17:29

问题


When I append arrays in google spreadsheets, all of the resulting elements are not rendered in cells. For example, if I enter the formula:

={{1,2,3}, {4,5,6}}

the values rendered in spreadsheet cells are 1,4,5,6. Any ideas about why this is happening, or alternatives? My broader problem is to accumulate rows from separate sheets into another sheet - I can do that via

={ImportRange(...), ImportRange(...)}

but the same problem is apparent (missing the second element and beyond from the first array).


回答1:


Edit (2 Oct 2014)

I just happened upon this when someone upvoted. The information below is obsolete in the newest version of Sheets - you can now (have been able to for a few months) concatenate arrays inside embedded arrays. All the examples that I provided below will work, including the one I said "shouldn't work".


Embedded arrays in Google Sheets

An array of values may be populated by a single function using an embedded array. Each element in the embedded array (and this may be point of conjecture; it is more or less just my opinion) represents the value that will be populated in contiguous cells in the sheet. Semi-colons are row delimiters; commas (or backslashes in locales that use a comma for a decimal separator) are column delimiters. So this will successfully create a two-row, three-column array (all of the following examples assume a locale supporting comma column delimiters):

={1,2,3;4,5,6}

Embedded arrays within embedded arrays

As each element in an embedded array represents a cell in the spreadsheet, I think it is reasonable to assume that one should be able to populate a cell with another embedded array, as long as it does not overwrite other elements in the outer embedded array. So IMO something like this should (see point 3) be successful:

={{1;2;3},{4;5;6}}

However something like this shouldn't work (again IMO), as the second and third elements of the first embedded array would be "overwriting" the second embedded array:

={{1,2,3},{4,5,6}}

There is a bug associated with the first embedded array inside an embedded array

As +Jason pointed out, something like ={{1;2;3},{4;5;6},{7;8;9}} doesn't work in that the first embedded array only populates one element (but every other column is populated correctly). It is also interesting that that one element is auto-converted to a text string. This is (unfortunately) a long standing bug in Google Sheets. The same thing occurs when you attempt to invoke the SPLIT() function on an array (every element in the array is split successfully except for the first one).

I don't think embedded arrays within embedded arrays will help with your broader problem anyway

Embedded arrays can't really be used to append one array on to end of another anyway (due to the "overwriting" effect), and there is no native function that can do it directly. The VMERGE function which you can obtain via the Script gallery (credit to +ahab) will work out of the box:

=VMERGE(ImportRange(...);ImportRange(...);...)

or you can use native functions to do some string manipulation to achieve this. For example, for one-dimensional arrays:

=ArrayFormula(TRANSPOSE(SPLIT(CONCATENATE(ImportRange("key1";"A1:A10")&CHAR(9);ImportRange("key2";"A1:A10")&CHAR(9));CHAR(9))))

but as well as being clunky and not very readable, this type of formula can be very expensive performance-wise for large data sets (I would tend to recommend the VMERGE custom function option in preference).




回答2:


It is possible to make a union in Google Spreadsheet very easily. For example:

={'Sheet1'!A2:A;'Sheet2'!A2:A;'Sheet3'!A2:A}

See more info in Google Docs Help: Using arrays in Google Sheets



来源:https://stackoverflow.com/questions/15985637/appending-google-spreadsheet-arrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!