Runtime DataTable - Import/Export text CSV or Google Sheet at runtime and auto-update structs and UObjects!

I don’t have Linux is the biggest one! And I’ve tried installing it previously and frustrated myself for more hours than I’d make a return on. That’s the issue.

I am getting a Steam Deck whenever my After Q2 order actually arrives, so I’ll finally have a good test bed for Linux. It does have OpenSSL support in the engine so by all accounts it should package just fine for Linux, but UE Marketplace stipulates you must have the devices you build for tested 100%. I know not everyone follows that rule, but I take this gig seriously.

If you want to try it yourself on a Linux machine, grab the plugin from the launcher on Windows or Mac then copy it to your project directory on Linux. Open the uplugin file and add “Linux” to the whitelist. Then In the editor. open the Plugins Window, find Runtime DataTable and click “Package” and this should start packaging for Linux. If that works without error, you should be good to go.

I haven’t forgotten about you tweety, I need more time to finish something for a client before I can try to figure this out for you.

No worries, I understand :+1:

Hi, I’m trying to update my project from 4.26 to 4.27, and I have the plugin installed to both versions, but when trying to open my project which is converted to 4.27 I get this error:

image

Clicking yes just opens the Runtime Data Table Plugin Page, which just says install to engine, and if I click it it says it’s installed on all compatible engine versions.

Thanks in advance

Hi Flohhhh, sorry for that, growing pains between engines. This is covered in this post: Runtime DataTable - Import text CSV or Google Sheet at runtime and fill an array of structs! - #33 by Jared_Therriault

1 Like

Thank you! I have read through the documentation and got it working sucessfully!

I do have one other question though, is it possible to update a row in the sheet instead of just writing new rows to the sheet? For example, change one value in the row, or even just replace the whole row with the updated information?

Runtime DataTable only supports a wholesale sheet replacement with new data, so your best bet is to download the sheet as is, update an array, change the values you want to at runtime then export the entire array to CSV and upload to GS again.

If you want more granular control over sheet operations like changing values in a specific cell or range, that would be accomplished with GSheets Operator.

Glad to hear you have it working!

Hi again tweety, thank you for your patience! I was under a deadline and my brain was just not letting me shift focus. I’m ready to tackle your question now.

It looks like you’re trying to work with a data table you’ve imported in the editor using the built-in editor datatable then you’re trying to change that data at runtime.

Runtime DataTable doesn’t use the actual in-editor Data Table object like this, it empties out an array of structs that match your csv file then fills it up with one array member per row. Then you can access indices of that struct array based on the key in the first column of the csv.

Built-in data tables are read-only, but the data you get from Runtime DataTable is yours so you can edit it however you want to. So yes, I think that the plugin would be a good fit for your use case. If you haven’t seen it, please peruse the documentation: Runtime DataTable Documentation 4.27.4+ - Google Docs

Hello again! Thank you for your response. I do have another question (sorry for the multiple questions). I am a bit confused on how export array to string works. So if the attempt to build a CSV from an array is successful, does the function make a csv file in a certain directory on the pc? If not, is there a way to do such? Thank you in advance.

Another thing… I was wondering though if there was a way to import the float values from the array instead of the row names. I am able to export the array to a csv file using the ExportArrayToString and SaveStringToFile functions but the only values I see are the set of keys used in the first column of the CSV to uniquely identify rows. The code below is what I have so far for saving values of XRow array to string.
(apologies for bad image quality)

Ok, so the plugin works a little differently than this. The array needs to be an array of structs or UObjects, not floats. What you’ll want to do is get all actors of class and save it to a variable. Plug that actor array variable into the Export node and in “Members to Include” make sure you include the float array variable’s name, which appears to be “XRow.” This will export a row for each actor in the array and if the name of the variable is correct, it will create two columns - one for the row key and one for the array of floats. That array of floats will be in one cell, separated by comma.

Does that make sense? The plugin (confusingly) will accept an array of any type, but it will only work with arrays of struct or UObject. Unfortunately pins must be either typed or wildcards in this case because we want to accept structs of any kind, so we can’t specify which types are acceptable in the pin.

I understand. Thank you very much! I was able to finish the main parts of the project (I can now focus on the extras :slight_smile: ). Thank you again for your help!

1 Like

I dig it. Thanks for reporting back, I’m glad it’s working out for you!

Hello, I came across the plugin, and was wondering if you may confirm whether it’s appropriate for my use case. I have a few values I would like to be able to change externally at runtime. My idea is to set up a google spreadsheet where players can enter numbers after starting the game to change the values that will be saved in variables.
Can this plugin make the change happen automatically - or at the press of a button inside the game, but I suppose that would only require simple additional blueprint logic - and update the values in UE at runtime whenever there’s a change in the spreadsheet?
I hope I explained clearly enough; it’s an online multiplayer project, if it matters.

Hi Elina, the short answer is yes!

For multiplayer it’s usually best to load the data once in the GameMode and propagate that to each player state, but each client can get the data from GSheets as well if you prefer, you just have to watch out for man-in-the-middle cheat attacks - the sheet data is sent unencrypted (because Google doesn’t encrypt it) which means an end user could intercept the payload and edit the values on their local machines. This is why I prefer the GameMode-replication approach for multiplayer. It’s up to you and your use case. It sounds like the end users can edit the sheet freely anyway, so maybe this paragraph doesn’t even apply :slight_smile:

You can bring in the data at any time, either on start or after an event like a button press.

Thank you for the quick reply!

1 Like

Hi, Jared!

I have been using yours plugin, and works good. But now the unreal 5 came out and i was wondering about how to update current projects with this version. Will you do update for it? And also if it is time consuming how can I avoid “CSV info invalid” issue? Thank you one more time and waiting for the respond!

I am at work now mate, I can work on plugin updates only after then. Until then sit tight please, thank you.

Thank you!