Hi.
In the Spreadsheet controller when a user imports a spreadsheet into the controller either by cutting and pasting, or by using the import button, was wondering if there was a best practice way to either get all the values even if the value property is undefined or the cell is blank and does not exist in the array of cells for a given row?
I need to ultimately parse the control for the value (and eventually formulas) then putting them in a string with tab separated cells separated by an end of line character for the rows, then send it to an API where it is ultimately placed in the data base as a clob.
The problem is when I am doing this, in certain cases if the cell is empty then it does not exist in cells array for the given row, so when I get my sample data the cells for the row do not line up with the headers, that is to say the cells are missing. If the cells do exist but the value property does not exist, I usually get a JavaScript undefined value (because the value parameter doesn't exist), and I have to use an OR (||) operator to remove it and replace it with a blank.
The only thing I could think of was to iterate through the spreadsheet grid of the active sheet I am working with like this, using the range....but the user would have to select the range prior to kicking of the parsing job.
When the function is done I should have a string of the results with cells separated by \t and rows ending with \n:
DATA in stringified form: {"data":"ID\tInternational_ID\tLast Name\tFirst Name\tDescription\tAuth Role\tApp Server Type\tImport Type\tTime Zone Code\tApplication Type\t\n101\t\tHall\tJoe\tAssit and Admin\tAdvUser\t\t\t102\tAccounting\t\n102\t\tCallet\tBob\t\tAdmin\t\t\t102\tZooology\t\n103\t\tBaker\tDenny\t\tUser\tTripple Node\t\t109\tEngineering\t\n104\t\tBrewster\tFred\t\tAdvUser\t\t\t102\tProject Tracker\t\n105\t\tTurner\tDenise\t\tExecAdmin\tRegular\t\t115\t\t\n106\t\tZenni\tBee\t\tUser\t\t\t102\tAccounting\t\n107\t\tCook\tCarry\t\tAdvUser\t\t\t102\tEngineering\t\n108\t\tMathews\tHarry\t\tUser\t\tInternational\t102\t\t\n109\t\tDean\tDonny\t\tUser\tRegular\t\t102\tProject Tracker\t\n110\t\tFuller\tJames\t\tAdvUser\tTripple Node\t\t102\tScientific\t\n111\t\tAhrens\tJack\t\tAdmin\tRegular\t\t115\t\t\n112\t\tMikes\tGeorge\t\tUser\tHi Capacity\tLocal\t114\tProject Management\t\n113\t\tJones\tArnie\t\tAdvUser\tRegular\t\t116\t\t\n"}
If I cut and paste the above string into an excel spreadsheet sheet it will show the blank cells..and everything aligns.
If I didn't do this, then some of the cells would not exist, and I would getcells shifting into the wrong columns.
I need to capture even the blank cells and those with value == undefined.
Right now I am scanning the cells using a range for the first cell (probably A1) and also the last one... the user needs to set this before the parsing is done and this is very annoying. Is there an easy way to get the used range of the spreadsheet without the user having to set this?
Here is a code snippet of some test code:
https://dojo.telerik.com/@georgeg@pipkins.com/ELelOXuH/5
1) Import the file using the import file button:
2) Click on the Send Data button but I haven't a clue):
... a popup dialog will appear
....and select the range of the cells to be parsed into tab separated values (right now I'd like to figure out the used area automatically, but I haven't a clue).
3) Click the Submit button.
4) Go to console and look at the data:
... you should be able to grab/copy the first bit of data and paste it into a spreadsheet and get it to align with the columns should be no row shifting.
Then the spreadsheet should look like this:
THE BIG-TICKET ITEM IS: I just want to parse through the cells of the Spreadsheet control once, and without having the user select the range... it would be done automatically. I am just wondering if there isn't an easier, cleaner way to do this? I wish I could send you my test excel spreadsheet it would be easier to constrain what is going on... I sent you a tab separated txt file you should be able to convert that easily to an excel file.
Thanks again for your help and patience!
George