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

Jared Hello, i was using your runtime datatable with archviz explorer and i was wondering if its possible to write to the public google sheets file from runtime with your plugin

Hello Monarch, the answer is yes, you can write to public sheets as well as private sheets using this method: Runtime DataTable Documentation 4.27.4+ - Google Docs

Note that you will still need to authenticate your service account the same way you would for a private sheet. Anonymous writes are not possible with Google Sheets like public anonymous reads are. Regardless of sharing settings, all users must be authenticated to write to any sheet.

hello sir i purchased you plugin but i have this warning on packaging :
LogPython: Warning: ‘EasyCsv.MakeCsvInfoStructFromFile’ and ‘EasyCsv.MakeCsvInfoStructFromFile’ have the same name (make_csv_info_from_file) when exposed to Python. Rename one of them using ‘ScriptName’

can y help please thanks

Hello Maxodia, a few questions:

  1. Is this issue preventing you from packaging, or is it just a warning?
  2. Which version of Unreal Engine are you using?
  3. Which version of Runtime DataTable are you using?
  4. Do you also have easyCSV installed?

:smiley: thanks for your kind help …just a warning …5.1…run time data table only from marketplace…no csv …
i am also have this red message on exe start up
[[error runtime data table object: GenericValidate Get response recieved succes false response code q]]…thanks for your patience and help .:smiley:

i found that this happens when i am offline in the exe … is there a way to store the sheet local on pc?

hey there any updates ?

Hi maxodia, sorry for the latency, I just returned from summer vacation!

To your question, yes, you can store the sheet locally. Do you already have the sheet or do you want to download it from Google?

If you’re downloading it, an easy place to save it is in the saved directory, which is platform agnostic and does not require any special permissions. Just search for “GetProjectSavedDir” in blueprints or FPaths in C++. Then use SaveStringToFile to save the table to a .csv file in your saved directory. Does that make sense and answer your question? Feel free to return with more details!

1 Like

Hi there! Thanks for this great plugin!
I’m having trouble with the option on MakeCSVInfoFromString() What ParseKeys == False.

When I set Parse Keys True, then it works just fine.
But when it’s false, my columns are offset by 1.

This is when Parse Keys is true. It looks great

Here is the GoogleSheet
image

But when I uncheck the box, and delete the first column in my GSheet, it skips the first column on my Headers array too, so I lose ‘Group’

And if I add a dummy column into the GSheet (and leave it blank) then it does include the Group Column, but then the data is offset. I wonder if I’m doing something wrong, or there’s something going on?

thanks will give it a shot

Hi.
I have just bought the plugin. I am running on 4.27.2.Downloaded the sample project for 4.27 but it doesn’t compile.

Hello SasMaster,

can you provide a build log or anything that can help me troubleshoot the problem? Thank you.

Hi Again, sorry for the late reply. I deleted all the C++ files in that project and it worked. With the sources the compiler throws errors which look like the UE classes are not recognized.
I have another question now, also sent you a direct email on this issue.
I am trying to understand how can I parse a header row with your API. I have a googlesheet,with first row defined as a header. Yet MakeCSVInfoFromString() function always returns CSV_Headers array empty. How is it supposed to work?
UPDATE: Ok, I was able to get CSV_Headers populated once I added data into other rows.
But now I see a new problem. CSV_headers contains 3 out of 4 cells.
Here is my sheet:

CSV_Headers array contains only 3 entries: “B”,“C”,“D” . First cell is not there.
Here is the raw CSV:

A,B,C,D
Thank you,for joining ,us,Dan
Great,to see you,again,Daniel
We haven’t ,heard from,you,Lusy
Congratulations,on your,aniversary,Kyryl

This is because the first column is expected to have a column of keys. If you can, add another column on the left called “Keys” (though any name is fine) and populate it with any unique identifier - a number is fine, just make it unique. You can automatically number your rows with this method: How to Number Rows in Google Sheets (Easiest Way 2023)

Unchecking “Parse Keys” in MakeCSVInfoFromString is designed to handle this use case, but I have been alerted to an issue with this function but have not had the time to tackle it. For now, adding a keys column is the best workaround.

Well, in my case it is a bit of a problem as the sheet is edited by users and I don’t want to force upon them inserting an extra column that makes no sense for them. In your code I see this line:

OutCsvInfo.CSV_Headers.RemoveAt(0, 1, true);

If I comment it out then the whole header row stays as is,right?

Hello Jared!

50% of the time I’m getting this visual error at begin play:

Checking the Call Stack, this is happening in FinishRequest() line 1256

However, everything is working fine. This is like a minor bug.

Can you help me?

Thanks!

Hello again…

I have a bigger problem right now, using your plugin in the UE5.3 build version.

“CallOnComplete.ExecuteIfBound” returns false in the build version (development, debug and shipping). It is returning true playing unreal’s editor.

image

In other words, your plugin is not working, I can’t load any file.

Any clue please?

Cheers,

Zaser

Your plugin is losing the delegates…

What a mess!

Would you mind sending me your full event logs? I can’t reproduce your issue. You can send them via PM. Thank you.

Hey @JaredTherriault
Wondering if there is any way to access different sheets from a google sheets file
eg. Sheet1 and Sheet2 from the image attached below

image

hello kabirpunde,

yes, each sheet has a unique URL. When one is selected in Google Sheets, the url in your address bar will change. Which one you use in RDT depends on the URL given.