## Manipulating excel with Matlab

August 07, 2011 at 09:25 PM | categories: file io | View Comments

# Manipulating excel with Matlab

John Kitchin

Sometimes there is data in an excel sheet that you want to read in, or you may want to write data to a spreadsheet. If you have a sophisticated analysis done in excel, but you want to do some analysis in Matlab, you might want to write data to the worksheet, and then read out the results.

## Contents

## Example setup

in our spreadsheet ( download example.xlsx ), cell B1 contains a value, and cell B2 contains . We can read each cell. We can also write a value to B1, and then read B2 to get the value squared. finally, we will create a function that uses Excel to perform the calculation of squaring a number, and use fsolve to minimize the function.

It is a simple example to illustrate a usage. A more realistic example might be an excel sheet where you have a complex design sheet that computes the cost of a unit operation based on properties such as volume, flow rate, etc... and you want to use Matlab to minimize the cost, but Excel to compute the cost. This is not speedy, and you may find it necessary to eventually code the whole analysis in Matlab.

```
function main
```

## examples of reading

xlsread('example.xlsx','sheet1','b1') xlsread('example.xlsx','sheet1','b2') xlswrite('example.xlsx',4,'sheet1','b1')

ans = 3 ans = 8

xlsread('example.xlsx','sheet1','b1') xlsread('example.xlsx','sheet1','b2') % you can see we did set the value of b1 as we said, and the value of b2 is % updated also.

ans = 4 ans = 15

## Find roots

there are two solutions, . We try guesses above and below each one.

## positive root

fsolve(@f,2) fsolve(@f,0.8)

Equation solved. fsolve completed because the vector of function values is near zero as measured by the default value of the function tolerance, and the problem appears regular as measured by the gradient. ans = 1.0000 Equation solved. fsolve completed because the vector of function values is near zero as measured by the default value of the function tolerance, and the problem appears regular as measured by the gradient. ans = 1.0000

## negative root

```
fsolve(@f,-2)
fsolve(@f,-0.8)
% note it is not fast to solve this!
```

Equation solved. fsolve completed because the vector of function values is near zero as measured by the default value of the function tolerance, and the problem appears regular as measured by the gradient. ans = -1.0000 Equation solved. fsolve completed because the vector of function values is near zero as measured by the default value of the function tolerance, and the problem appears regular as measured by the gradient. ans = -1.0000

## make a plot

x = linspace(-2,2,10); y = arrayfun(@f,x); %this maps the function f onto the vector x plot(x,y) % note that this is also pretty slow.

function y = f(x) xlswrite('example.xlsx',x,'sheet1','b1'); y = xlsread('example.xlsx','sheet1','b2'); % categories: File IO % post_id = 739; %delete this line to force new post;