yincar 发表于 2006-10-17 10:15

关于将matlab计算得到的数据输入excel中的问题。

经过大家的指导,我已经学会了如何将excel数据库中的数据倒入matlab中了,可是我现在想知道如何将已经算好的matlab数值放入存放原始数据的excel文件中的某个确定列中。
看到前面的帖子有讲道用加入语句”wk1write('datas',S);“。可是我运行却在excel中得不到相应的数据
请问怎么解决?
是不是还有别的方法?
非常感谢!!

[ 本帖最后由 lxq 于 2006-11-22 21:30 编辑 ]

xjzuo 发表于 2006-10-17 10:53

关于将matlab计算得到的数据输入excel中的问题

好象可以先复制为.txt文件,再粘贴到excel中.

yincar 发表于 2006-10-17 11:19

可不可以通过语句,直接将数据倒入excel中。

鼻涕佛 发表于 2006-10-17 19:37

如果是纯数字

那么用xlswrite,具体用法可以参考matlab 的help
还可以用工具箱Excel Link ,有问题再交流

yincar 发表于 2006-10-18 14:27

谢谢楼上,用xlswrite我已经实现了.
顺便问一下:用xlswrite不能把多项式传到excel里阿!
请问 什么语句可以使多项式倒入excel
谢谢

ydliu_zn 发表于 2006-10-18 15:48

楼主,能不能把如何将excel数据库中的数据倒入matlab中和如何将已经算好的matlab数值放入excel文件中的某个确定列中的m文件上传上来,让大家学习一下呢?谢谢

ppdd 发表于 2006-10-18 16:24

数据太大了不可以吧。
上次就遇到这个问题,就是因为数据太大不能写进去。也不知道高手还有什么妙招!

[ 本帖最后由 ChaChing 于 2010-4-3 01:07 编辑 ]

yincar 发表于 2006-10-19 10:03

我倒入数据用的是c=xlsread('tong.xls');
导出数据用的是xlswrite(‘文件位子和名称’,矩阵名,'excel的页码','第几行第几列');
例如:xlswrite('d:\Program Files\MATLAB71\work\tong.xls',erro_y','sheet3','C2');

这里想请问各位:怎样将一个多项式倒入excel中
用xlswrite('d:\Program Files\MATLAB71\work\tong.xls',erro_y','sheet3','C2');倒入后就会在excel中看到多项式的每一数字就占用excel一行,这样一个6项的多项式要占用很多行数,多项式看的很分散,请问个位高手有什么好的方法吗?

怎样能将几个汉字,写到excel里的一个单元格里。例如:将‘误差结果’这几个字,写到A2里。
我用了xlswrite('d:\Program Files\MATLAB71\work\tong.xls',aa,'sheet3','A2');可是得到的结果却是,A2,B2,C2,D2里 每个格里一个汉字,要怎样解决???
牛人们,帮帮忙阿!!

[ 本帖最后由 ChaChing 于 2010-4-4 19:02 编辑 ]

happy 发表于 2006-10-19 15:00

和上面的问题一模一样

aa=cell(1);
aa{1}='误差结果';
xlswrite(''d:\Program Files\MATLAB71\work\tong.xls',aa,'sheet3','A2');

在帖子http://forum.vibunion.com/thread-28753-1-1.html中的4楼已经作了回复

happy 发表于 2006-10-19 15:34

原帖由 ydliu_zn 于 2006-10-18 15:48 发表
楼主,能不能把如何将excel数据库中的数据倒入matlab中和如何将已经算好的matlab数值放入excel文件中的某个确定列中的m文件上传上来,让大家学习一下呢?谢谢

如果你用的是7.0或以上版本则matlab已经自带了,如果是7.0以下版本可以用下面的函数
function =xlswrite(file,data,sheet,range)
% XLSWRITE Stores numeric array or cell array in Excel workbook.
%   =XLSWRITE(FILE,ARRAY,SHEET,RANGE) writes ARRAY to the Excel
%   workbook, FILE, into the area, RANGE in the worksheet specified in SHEET.
%   FILE and ARRAY must be specified. If either FILE or ARRAY is empty, a
%   error is thrown and XLSWRITE terminates. The first worksheet of the
%   workbook is the default. If SHEET does not exist, a new sheet is added at
%   the end of the worksheet collection. If SHEET is an index larger than the
%   number of worksheets, new sheets are appended until the number of worksheets
%   in the workbook equals SHEET. The size definedby theRANGE should fit the
%   size of ARRAY or contain only the first cell, e.g. 'A2'. If RANGE is larger
%   than the size of ARRAY, Excel will fill the remainder of the region with
%   #N/A. If RANGE is smaller than the size of ARRAY, only the sub-array that
%   fits into RANGE will be written to FILE. The success of the operation is
%   returned in SUCCESS and any accompanying message, in MESSAGE. On error,
%   MESSAGE shall be a struct, containing the error message and message ID.
%   See NOTE 1.
%
%   =XLSWRITE(FILE,ARRAY) writes ARRAY to the Excel workbook,
%   FILE, starting at cell A1 of the first worksheet. The return values are as
%   for the above example.
%
%   XLSWRITE ARRAY FILE, is the command line version of the above example.
%
%   INPUT PARAMETERS:
%       file:   string defining the workbook file to write to.
%               Default directory is pwd; default extension 'xls'.
%       array:m x n numeric array or cell array.
%       sheet:string defining worksheet name;
%               double, defining worksheet index.
%       range:string defining data region in worksheet, using the Excel
%               'A1' notation.
%
%   RETURN PARAMETERS:
%       SUCCESS: logical scalar.
%       MESSAGE: struct containing message field and message_id field.
%
%   EXAMPLES:
%
%   SUCCESS = XLSWRITE('c:\matlab\work\myworkbook.xls',A,'A2:C4') will write A to
%   the workbook file, myworkbook.xls, and attempt to fit the elements of A into
%   the rectangular worksheet region, A2:C4. On success, SUCCESS will contain true,
%   while on failure, SUCCESS will contain false.
%
%   NOTE 1: The above functionality depends upon Excel as a COM server. In
%   absence of Excel, ARRAY shall be written as a text file in CSV format. In
%   this mode, the SHEET and RANGE arguments shall be ignored.
%
% See also XLSREAD, WK1WRITE, CSVWRITE.
%

%   JP Barnard
%   Copyright 1984-2005 The MathWorks, Inc.
%   $Revision: 1.1.6.8 $$Date: 2005/06/21 19:35:45 $
%==============================================================================
% Set default values.
Sheet1 = 1;

if nargin < 3
    sheet = Sheet1;
    range = '';
elseif nargin < 4
    range = '';
end

if nargout > 0
    success = true;
    message = struct('message',{''},'identifier',{''});
end

% Handle input.
try
    % handle requested Excel workbook filename.
    if ~isempty(file)
      if ~ischar(file)
            error('MATLAB:xlswrite:InputClass','Filename must be a string');
      end
      % check for wildcards in filename
      if any(findstr('*', file))
            error('MATLAB:xlswrite:FileName', 'Filename must not contain *');
      end
      =fileparts(file);
      if isempty(ext) % add default Excel extension;
            ext = '.xls';
      end
      file = abspath(fullfile(Directory,));
       = fileattrib(file);
      if a1 && ~(a2.UserWrite == 1)
            error('MATLAB:xlswrite:FileReadOnly', 'File can not be read only.');
      end
    else % get workbook filename.
      error('MATLAB:xlswrite:EmptyFileName','Filename is empty.');
    end

    % Check for empty input data
    if isempty(data)
      error('MATLAB:xlswrite:EmptyInput','Input array is empty.');
    end

    % Check for N-D array input data
    if ndims(data)>2
      error('MATLAB:xlswrite:InputDimension',...
            'Dimension of input array cannot be higher than two.');
    end

    % Check class of input data
    if ~(iscell(data) || isnumeric(data) || ischar(data)) && ~islogical(data)
      error('MATLAB:xlswrite:InputClass',...
            'Input data must be a numeric, cell, or logical array.');
    end

    % convert input to cell array of data.
    if iscell(data)
      A=data;
    else
      A=num2cell(data);
    end

    if nargin > 2
      % Verify class of sheet parameter.
      if ~(ischar(sheet) || (isnumeric(sheet) && sheet > 0))
            error('MATLAB:xlswrite:InputClass',...
                'Sheet argument must a string or a whole number greater than 0.');
      end
      if isempty(sheet)
            sheet = Sheet1;
      end
      % parse REGION into sheet and range.
      % Parse sheet and range strings.
      if ischar(sheet) && ~isempty(strfind(sheet,':'))
            range = sheet; % only range was specified.
            sheet = Sheet1;% Use default sheet.
      elseif ~ischar(range)
            error('MATLAB:xlswrite:InputClass',...
                'Range argument must a string of Excel A1 notation.');
      end
    end

catch
    if ~isempty(nargchk(2,4,nargin))
      error('MATLAB:xlswrite:InputArguments',nargchk(2,4,nargin));
    elseif nargout == 0
      rethrow(lasterror);   % Display last error.
    else
      success = false;
      message = lasterror;       % Return last error.
    end
    return;
end
%------------------------------------------------------------------------------
% Attempt to start Excel as ActiveX server.
try
    Excel = actxserver('Excel.Application');

catch
    warning('MATLAB:xlswrite:NoCOMServer',...
      ['Could not start Excel server for export.\n' ...
      'XLSWRITE attempts to file in CSV format.']);
    if nargout > 0
       = lastwarn;
    end
    % write data as CSV file, that is, comma delimited.
    file = regexprep(file,'(\.xls)$','.csv'); % change extention to 'csv'.
    try
      dlmwrite(file,data,','); % write data.
    catch
       = lasterror;
      erroridentifier = 'MATLAB:xlswrite:dlmwrite';
      errormessage = ['An error occurred on data export in CSV format.\n',...
            last_error.message];
      if nargout == 0
            % Throw error.
            error(erroridentifier,errormessage);
      else
            success = false;
            message.message = sprintf(errormessage);
            message.identifier = erroridentifier;
      end
    end
    return;
end
%------------------------------------------------------------------------------
try
    % Construct range string
    if isempty(strfind(range,':'))
      % Range was partly specified or not at all. Calculate range.
       = size(A);
      range = calcrange(range,m,n);
    end
catch
    if nargout == 0
      rethrow(lasterror);   % Display last error.
    else
      success = false;
      message = lasterror;       % Return last error.
    end
    return;
end

%------------------------------------------------------------------------------
try
    if ~exist(file,'file')
      % Create new workbook.
      
      %This is in place because in the presence of a Google Desktop
      %Search installation, calling Add, and then SaveAs after adding data,
      %to create a new Excel file, will leave an Excel process hanging.
      %This workaround prevents it from happening, by creating a blank file,
      %and saving it.It can then be opened with Open.
      ExcelWorkbook = Excel.workbooks.Add;
      ExcelWorkbook.SaveAs(file,1);
      ExcelWorkbook.Close(false);
    end
   
    %Open file
    ExcelWorkbook = Excel.workbooks.Open(file);
   
    try % select region.
      % Activate indicated worksheet.
      message = activate_sheet(Excel,sheet);

      % Select range in worksheet.
      Select(Range(Excel,sprintf('%s',range)));

    catch % Throw data range error.
      error('MATLAB:xlswrite:SelectDataRange',lasterr);
    end

    % Export data to selected region.
    set(Excel.selection,'Value',A);
    ExcelWorkbook.Save
    ExcelWorkbook.Close(false)% Close Excel workbook.
    Excel.Quit;
catch
    try
      ExcelWorkbook.Close(false);    % Close Excel workbook.
    end
    Excel.Quit;
    delete(Excel);               % Terminate Excel server.
    if nargout == 0
      rethrow(lasterror);   % Display last error.
    else
      success = false;
      message = lasterror;       % Return last error.
    end
end
%--------------------------------------------------------------------------
function message = activate_sheet(Excel,Sheet)
% Activate specified worksheet in workbook.

% Initialise worksheet object
WorkSheets = Excel.sheets;
message = struct('message',{''},'identifier',{''});

% Get name of specified worksheet from workbook
try
    TargetSheet = get(WorkSheets,'item',Sheet);
catch
    % Worksheet does not exist. Add worksheet.
    TargetSheet = addsheet(WorkSheets,Sheet);
    warning('MATLAB:xlswrite:AddSheet','Added specified worksheet.');
    if nargout > 0
       = lastwarn;
    end
end

% activate worksheet
Activate(TargetSheet);
%------------------------------------------------------------------------------
function newsheet = addsheet(WorkSheets,Sheet)
% Add new worksheet, Sheet into worsheet collection, WorkSheets.

if isnumeric(Sheet)
    % iteratively add worksheet by index until number of sheets == Sheet.
    while WorkSheets.Count < Sheet
      % find last sheet in worksheet collection
      lastsheet = WorkSheets.Item(WorkSheets.Count);
      newsheet = WorkSheets.Add([],lastsheet);
    end
else
    % add worksheet by name.
    % find last sheet in worksheet collection
    lastsheet = WorkSheets.Item(WorkSheets.Count);
    newsheet = WorkSheets.Add([],lastsheet);
end
% If Sheet is a string, rename new sheet to this string.
if ischar(Sheet)
    set(newsheet,'Name',Sheet);
end

%------------------------------------------------------------------------------
function =abspath(partialpath)

% parse partial path into path parts
= fileparts(partialpath);
% no path qualification is present in partial path; assume parent is pwd, except
% when path string starts with '~' or is identical to '~'.
if isempty(pathname) && isempty(strmatch('~',partialpath))
    Directory = pwd;
elseif isempty(regexp(partialpath,'(.:|\\\\)')) && ...
      isempty(strmatch('/',partialpath)) && ...
      isempty(strmatch('~',partialpath));
    % path did not start with any of drive name, UNC path or '~'.
    Directory = ;
else
    % path content present in partial path; assume relative to current directory,
    % or absolute.
    Directory = pathname;
end

% construct absulute filename
absolutepath = fullfile(Directory,);
%------------------------------------------------------------------------------
function range = calcrange(range,m,n)
% Calculate full target range, in Excel A1 notation, to include array of size
% m x n

range = upper(range);
cols = isletter(range);
rows = ~cols;
% Construct first row.
if ~any(rows)
    firstrow = 1; % Default row.
else
    firstrow = str2double(range(rows)); % from range input.
end
% Construct first column.
if ~any(cols)
    firstcol = 'A'; % Default column.
else
    firstcol = range(cols); % from range input.
end
try
    lastrow = num2str(firstrow+m-1);   % Construct last row as a string.
    firstrow = num2str(firstrow);      % Convert first row to string image.
    lastcol = dec2base27(base27dec(firstcol)+n-1); % Construct last column.

    range = ; % Final range string.
catch
    error('MATLAB:xlswrite:CalculateRange',...
      'Data range must be between A1 and IV65536.');
end

%------------------------------------------------------------------------------
function s = dec2base27(d)

%   DEC2BASE27(D) returns the representation of D as a string in base 27,
%   expressed as 'A'..'Z', 'AA','AB'...'AZ', until 'IV'. Note, there is no zero
%   digit, so strictly we have hybrid base26, base27 number system.D must be a
%   negative integer bigger than 0 and smaller than 2^52, which is the maximum
%   number of columns in an Excel worksheet.
%
%   Examples
%       dec2base(1) returns 'A'
%       dec2base(26) returns 'Z'
%       dec2base(27) returns 'AA'
%-----------------------------------------------------------------------------
b = 26;
symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

d = d(:);
if d ~= floor(d) | any(d < 0) | any(d > 1/eps)
    error('MATLAB:xlswrite:Dec2BaseInput',...
      'D must be an integer, 0 <= D <= 2^52.');
end

% find the number of columns in new base
n = max(1,round(log2(max(d)+1)/log2(b)));
while any(b.^n <= d)
    n = n + 1;
end

% set b^0 column
s(:,n) = rem(d,b);
while n > 1 && any(d)
    if s(:,n) == 0
      s(:,n) = b;
    end
    if d > b
      % after the carry-over to the b^(n+1) column
      if s(:,n) == b
            % for the b^n digit at b, set b^(n+1) digit to b
            s(:,n-1) = floor(d/b)-1;
      else
            % set the b^(n+1) digit to the new value after the last carry-over.
            s(:,n-1) = rem(floor(d/b),b);
      end
    else
      s(:,n-1) = []; % remove b^(n+1) digit.
    end
    n = n - 1;
end
s = symbols(s);
%------------------------------------------------------------------------------
function d = base27dec(s)
%   BASE27DEC(S) returns the decimal of string S which represents a number in
%   base 27, expressed as 'A'..'Z', 'AA','AB'...'AZ', until 'IV'. Note, there is
%   no zero so strictly we have hybrid base26, base27 number system.
%
%   Examples
%       base27dec('A') returns 1
%       base27dec('Z') returns 26
%       base27dec('IV') returns 256
%-----------------------------------------------------------------------------

d = 0;
b = 26;
n = numel(s);
for i = n:-1:1
    d = d+(s(i)-'A'+1)*(b.^(n-i));
end
%-------------------------------------------------------------------------------

happy 发表于 2006-10-19 15:35

原帖由 ppdd 于 2006-10-18 16:24 发表
上次就遇到这个问题,就是因为数据太大不能写进去。也不知道高手还有什么妙招!


没试过,不过应该可以通过分批写入的方式完成

ydliu_zn 发表于 2006-10-20 09:16

happy教授真是个高手啊,谢谢

lpwy2005 发表于 2006-10-21 21:37

使用通过,谢谢HAPPY.

boguslingo 发表于 2006-11-9 10:05

我想问一下上面的高手,excel表里的字符变量怎么读入matlab里面呢,我在用matlab的统计工具,用决策树对数据分类,生成树。可是总是提示我变量错误,我也不知道怎么回事,请指教,谢谢。

yamma 发表于 2006-11-9 14:22

原帖由 lpwy2005 于 2006-10-21 21:37 发表
使用通过,谢谢HAPPY.

我用的是6.0.烤入这个xlswrite这个函数之后,有很多不通的地方,不知是怎么回事
88的&&~这个不认,还有107的||两竖也不认
?? Error: File: F:\matlab\work\xlswrite.m Line: 107 Column: 23
")" expected, "identifier" found.
是怎么回事呢
页: [1] 2
查看完整版本: 关于将matlab计算得到的数据输入excel中的问题。