Have you resolved this? If not, are you using a report that is derived from %ZEN.Report.reportPage? If you are, you can use the "GenerateReport()" instance method to create an "xlsx" Excel file, which can then be exported to ".csv" after opening it from Excel.
Alternatively, the following code highlights how to generate a CSV file containing the results of a query:
ClassMethod ExportCSV(/* some args */) As %String [ ZenMethod ]
{
/* get a results set named "rs" from a query (sql statement, or, in this example a query class):
Set rs=##class(%ResultSet).%New("<some query class")
Do rs.Prepare()
Do rs.Execute(/*some args*/)
*/
// Define the delimeter to be used in CSV file (usually comma)
Set Delim = ","
// Define the file and its name
Set File = ##class(%FileCharacterStream).%New()
Set Filename = "filename.csv"
Set File.BOM = $C(239,187,191)
Set File.Filename = "C:\temp\"_Filename
Set File.TranslateTable = "UTF8"
// Define the names of the columns (should match up with the values in each row of the result
// set. In this example, there are 3 columns
Set FileHeader = $LB("Name","Rank","","SerialNumber")
Do File.WriteLine($ZCVT($LTS(FileHeader, Delim), "O", "UTF8"))
While rs.%Next()
{
Set Row = ""
For i = 1:1:$LL(FileHeader)
{
Set col = $LG(FileHeader, i)
Set Data = rs.%Get(col)
// Replace characters that may mess up the CSV file (e.g., embedded commas in a data field)
Set Data = $REPLACE(Data, $C(13), " ")
Set Data = $REPLACE(Data, $C(10), " ")
Set Data = $REPLACE(Data, """", "'")
Set:(Data [ ",") Data = """"_Data_""""
Set Data = $ZCVT(Data, "O", "UTF8")
// Add the datum to the row's list
Set Row = Row_$LB(Data)
}
// Each element in the "row list" is written, separated by "Delim" (comma) on one line
// in the file
Do File.WriteLine($LTS(Row, Delim))
}
// Set attributes of the file for easier reading by the right apps later.
Do File.SetAttribute("ContentType","application/octet-stream; charset=utf-8")
Do File.SetAttribute("ContentDisposition","attachment; filename="""_Filename_"""")
Do File.SetAttribute("Expires",600)
Do File.SetAttribute("Content-Length",File.Size)
Do File.%Save()
// Return the name of the full path to the CSV file
Quit File.Filename
}
Please confirm if this is helpful or if you have other questions.
set st = ##class(%SQL.Statement).%New(2,"Sample")
set sql = 3
set sql(1) = "select TOP 5 %ID as id, Name, DOB, Home_State"
set sql(2) = "from Person where Age > 40"
set sql(3) = "order by 2"
do st.%Prepare(.sql)
for type="txt","pdf","csv","html","xml" {
set rs = st.%Execute()
do rs.%DisplayFormatted(type,"C:\Temp\report")
}
What is the process for a report that is derived from %ZEN.ComponentPage. Is it the same as %ZEN.Report.reportPage? As outlined in Jean Millette's comments.
Hello Rochdi,
Have you resolved this? If not, are you using a report that is derived from %ZEN.Report.reportPage? If you are, you can use the "GenerateReport()" instance method to create an "xlsx" Excel file, which can then be exported to ".csv" after opening it from Excel.
https://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?...
Alternatively, the following code highlights how to generate a CSV file containing the results of a query:
Please confirm if this is helpful or if you have other questions.
Thank you
Yes thank you very much Jean
See %SQL.StatementResult:%DisplayFormatted()
Simple sample (for namespace "SAMPLES"):
As a result, the following files are generated:
Thanks Vitaliy
What is the process for a report that is derived from %ZEN.ComponentPage. Is it the same as %ZEN.Report.reportPage? As outlined in Jean Millette's comments.