1
$\begingroup$

Im trying to export data from the interpolating function result to excel.

everything works fine and the plots are as expected, but if I want to export these data to excel using

Export["data.xlsx", Table[Flatten[{t, soldata}], {t, 0, tmax}]]

the t values only show 1 decimal whereas the soldata results are expressed in much as 15 decimals. This makes the exported file missing many cells. How can I make t in the excel file export as much decimals.

Here is the last part of the code

sol = ParametricNDSolveValue[{eqns, init}, vars, {t, 0, 2}, {p}]

soldata = Evaluate[sol[100][[1]], sol[100][[2]]]

excelData = Table[Flatten[{t, soldata}], {t, 0, 2}]

Export["data.xlsx", excelData]

$\endgroup$
4
  • 1
    $\begingroup$ Please give a description of soldata. Is it a list? Is it a 2-dimensional array where each row is a list of values? If soldata is a 2D array, is there a row for each of 0 to tmax? $\endgroup$
    – creidhne
    Nov 12, 2020 at 23:52
  • $\begingroup$ Maybe excelData = Table[Flatten[{t, soldata}], {t, 0, 2, 0.001} $\endgroup$
    – Bill Watts
    Nov 14, 2020 at 0:13
  • $\begingroup$ I still don’t the dimensions and content of soldata, but from your edit, I assume soldata is a 2D array with 2 columns, and rows for t = 0, to t = tmax. Do you want column 1 of the Excel data to be values equally spaced between 0 and tmax? I’ll assume... I’ve replaced my answer. $\endgroup$
    – creidhne
    Nov 14, 2020 at 0:54
  • $\begingroup$ {t, 0, 2, 0.001} did the job. I don't know why when I tried this before, It did not work. Its a very simple solution but I missed it. My bad. Thanks everyone $\endgroup$
    – MSM
    Nov 14, 2020 at 1:18

1 Answer 1

2
$\begingroup$

From the question, I still don't understand what soldata is. Can I assume it's a 2D array? If this is wrong, please add the output of soldata[[1;;2] to the question.

Assuming soldata has 2 columns, and row 1 represents t = 0, and the last row represents t = tmax. Here are some random values.

SeedRandom[123]
(*assume a 2D array, 5 rows by 2 columns*)
soldata = RandomReal[1, {5, 2}];

Let's add the time values from 0 to tmax as the first column of the Excel data.

tmax = 2;
excelData = 
  Prepend[##] & @@@ 
   Transpose[{soldata, N@Subdivide[0, tmax, Length@soldata - 1]}];

Or another method,

tmax = 2;
elcelData = Flatten /@ 
  Transpose[{N@Subdivide[0, tmax, Length@soldata - 1], soldata}];

So soldata:

${\small\left( \begin{array}{cc} 0.455719 & 0.977826 \\ 0.943215 & 0.962216 \\ 0.302348 & 0.466709 \\ 0.0616383 & 0.385645 \\ 0.429838 & 0.778744 \\ \end{array} \right)}$

becomes excelData:

${\small\left( \begin{array}{ccc} 0. & 0.455719 & 0.977826 \\ 0.5 & 0.943215 & 0.962216 \\ 1. & 0.302348 & 0.466709 \\ 1.5 & 0.0616383 & 0.385645 \\ 2. & 0.429838 & 0.778744 \\ \end{array} \right)}$

Export excelData to an Excel spreadsheet.

Export["data.xlsx", excelData]

Does excelData create the correct spreadsheet?

$\endgroup$
2
  • $\begingroup$ Maybe I was misunderstood and my question wasn't clear. I edited the question and added an image of what I am missing $\endgroup$
    – MSM
    Nov 13, 2020 at 22:57
  • $\begingroup$ Thank you creidhne for your effort in answering. It was a simple solution and was my bad missing it. I appreciate your answer nonetheless. $\endgroup$
    – MSM
    Nov 14, 2020 at 1:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.