The OneStream Community is temporarily frozen until June 29th due to the ongoing maintenance. Please read the blog post here to learn more.
Forum Discussion
Marco
2 years agoContributor II
Create CSV FILE
Hi Everyone.
I am creating a CSV file with the information from a datatable. The problem is that it generates the file with the columns but without the datatable information. I wanted to know if there is another way to create a CSV file correctly.
Dim strFilePathFull_AllocationDetails As String = strFilePath & "/" & strModelName & "_" & strScenarioName & "_" & strTimeName & "_" & dtAllocationDetails.TableName & ".csv"
Dim xfeFile_AllocationDetails As XFFileEx = dtbSH.DataTableToFile(si, dtAllocationDetails, strFilePathFull_AllocationDetails, Nothing)And my function:
Public Function DataTableToFile(ByVal si As SessionInfo, ByVal dt As DataTable, ByVal strFilePath As String, ByVal listColToSkip As List(Of String), ByVal Optional strSeparator As String = ",") As XFFileEx
Dim strDt As String = Me.PrintDataTable(si, dt, strSeparator, 0, False, listColToSkip, """")
Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(strDt)
Dim fileinfo As New XFFileInfo(fileSystemLocation.ApplicationDatabase, strFilePath)
Dim xfFile As New XFFile(fileinfo, String.Empty, bytes)
BRApi.FileSystem.InsertOrUpdateFile(si, xffile)
Dim xfeFile As New XFFileEx(xffile, DataAccessLevel.AllAccess, False)
Return xfeFile
End Function
I suspect your problem might lie in the checks you do with dt.Rows.Count. In a number of situations, that property doesn't work as expected. I would suggest to just loop on rows; if you want to enforce your "limit", keep track of iterations and then break out:
' it's bad practice to mess with stuff passed as parameter, let's wrap it... Dim realLimit as Integer = -1 if limit > 0 then realLimit = limit ' keep an iteration index Dim curr As Integer = 0 ' and we're off For Each row As DataRow In dt.Rows If curr >= realLimit Then Exit For Else curr += 1 End If ' ... turn your row into a string etc etc nextThe other den of dragons is that check on column names, which might be case sensitive or fail on minimal differences. At a minimum, I would turn that ColumnName to all lowercase or all uppercase, and ensure the elements in that list have had the same treatment.
Beyond that, I would check that your datatable actually contains data, particularly if it came from some .Clone() operation or similar.
Hope that helps!
5 Replies
- db_pdxValued Contributor
Check out the solutions here: Solved: Saving an export directly to the shared folder - OneStream Community (onestreamsoftware.com)
- MarcoContributor II
I had already seen the post, but that doesn't solve the problem of the row values not appearing, only the column values are displayed.
- JackLacava
OneStream Employee
If the file is created, and it contains something, then the code you posted has done its job.
What has probably not done its job, is the "Me.PrintDataTable" function you have there. You might want to post the content of that function. To verify, you can write that strDt variable to errorlog to see what it actually contains.
Related Content
- 2 months ago