⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_writexls.m

📁 电力系统的psat
💻 M
字号:
function fm_writexls(Matrix,Header,Cols,Rows,File)% FM_WRITEXLS export PSAT results to an Microsoft Excel%             spreadsheet using Matlab ActiveX interface.%             Microsoft Excel is required.%%             This function is based on xlswrite.m by Scott Hirsch%% FM_WRITEXLS(MATRIX,HEDAER,COLNAMES,ROWNAMES,FILENAME)%%    MATRIX     Matrix to write to file%               Cell array for multiple matrices.%    HEADER     String of header information.%               Cell array for multiple header.%    COLNAMES   (Cell array of strings) Column headers.%               One cell element per column.%    ROWNAMES   (Cell array of strings) Row headers.%               One cell element per row.%    FILENAME   (string) Name of Excel file.%               If not specified, contents will be%               opened in Excel.%%Author:    Federico Milano%Date:      13-Sep-2003%Version:   1.0.0%%E-mail:    fmilano@thunderbox.uwaterloo.ca%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2002-2005 Federico Milano%% This toolbox is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2.0 of the License, or% (at your option) any later version.%% This toolbox is distributed in the hope that it will be useful, but% WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANDABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU% General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this toolbox; if not, write to the Free Software% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,% USA.global Pathif ~iscell(Matrix)  Matrix{1,1} = Matrix;  Header{1,1} = Header;  Cols{1,1} = Cols;  Rows{1,1} = Rows;end% Open Excel, add workbook, change active worksheet,% get/put array, save.% First, open an Excel Server.Excel = actxserver('Excel.Application');% If the user does not specify a filename, we'll make Excel% visible if they do, we'll just save the file and quit Excel% without ever making it visible%if nargin < 5  set(Excel, 'Visible', 1);%end;% Insert a new workbook.Workbooks = Excel.Workbooks;Workbook = invoke(Workbooks, 'Add');% Make the first sheet active.Sheets = Excel.ActiveWorkBook.Sheets;sheet1 = get(Sheets, 'Item', 1);invoke(sheet1, 'Activate');% Get a handle to the active sheet.Activesheet = Excel.Activesheet;% --------------------------------------------------------------------% writing data% --------------------------------------------------------------------nhr = 0;for i_matrix = 1:length(Matrix)  m = Matrix{i_matrix};  colnames = Cols{i_matrix};  rownames = Rows{i_matrix};  header = Header{i_matrix};  [nr,nc] = size(m);  if nc > 256    fm_disp(['Matrix is too large.  Excel only supports 256' ...	     ' columns'],2)    delete(Excel)    return  end  % Write header  % -----------------------------------------------------------------  if iscell(header)    % Number header rows    for ii=1:length(header)      jj = nhr + ii;      ActivesheetRange = get(Activesheet, ...			     'Range', ...			     ['A',num2str(jj)], ...			     ['A',num2str(jj)]);      set(ActivesheetRange, 'Value', header{ii});    end    nhr = nhr + length(header);  else    % Number header rows    nhr = nhr + 1;    hcol = ['A',num2str(nhr)];    ActivesheetRange = get(Activesheet,'Range',hcol,hcol);    set(ActivesheetRange, 'Value', header);  end  %Add column names  % -----------------------------------------------------------------  if nargin > 2 & ~isempty(colnames)    [nrows,ncolnames] = size(colnames);    for hh = 1:nrows    nhr = nhr + 1;    for ii = 1:ncolnames      colname = localComputLastCol('A',ii);      cellname = [colname,num2str(nhr)];      ActivesheetRange = get(Activesheet,'Range',cellname,cellname);      set(ActivesheetRange, 'Value', colnames{hh,ii});    end    end  end  % Put a MATLAB array into Excel.  % -----------------------------------------------------------------  % Data start right after the headers  FirstRow = nhr + 1;  LastRow = FirstRow + nr - 1;  % First column depends on the dimension of rownames      [nrownames,ncols] = size(rownames);  if nargin < 3 | isempty(rownames)    FirstCol = 'A';  elseif isempty(colnames)    FirstCol = 'D';  else    switch ncols     case 1, FirstCol = 'B';     case 2, FirstCol = 'C';     case 3, FirstCol = 'D';     case 4, FirstCol = 'E';     case 5, FirstCol = 'F';     otherwise, FirstCol = 'G';    end  end  if ~isempty(m)  LastCol = localComputLastCol(FirstCol,nc);  ActivesheetRange = get(Activesheet,'Range', ...				     [FirstCol,num2str(FirstRow)], ...				     [LastCol,num2str(LastRow)]);  set(ActivesheetRange, 'Value', m);  end  %Add row names  % -----------------------------------------------------------------  if nargin > 3 & ~isempty(rownames)    %nrownames = length(rownames);    for ii = 1:nrownames      for jj = 1:ncols	switch jj	 case 1, Col = 'A';	 case 2, Col = 'B';	 case 3, Col = 'C';	 case 4, Col = 'D';	 case 5, Col = 'E';	 otherwise, Col = 'F';	end	%rowname = localComputLastCol('A',FirstRow+ii-1);	cellname = [Col,num2str(FirstRow + ii - 1)];	ActivesheetRange = get(Activesheet,'Range',cellname,cellname);	set(ActivesheetRange, 'Value', rownames{ii,jj});      end    end  end  % add a blank row in between data  % -----------------------------------------------------------------  nhr = LastRow + 1;end% If user specified a filename, save the file and quit Excel% -------------------------------------------------------------------if nargin == 5  invoke(Workbook, 'SaveAs', [Path.data,File]);  %invoke(Excel, 'Quit');  fm_disp(['Excel file ',Path.data,File,' has been created.']);end%Delete the ActiveX object% -------------------------------------------------------------------delete(Excel)% Local functions% -------------------------------------------------------------------function LastCol = localComputLastCol(FirstCol,nc);% Compute the name of the last column where we will place data% Input:%  FirstCol  (string) name of first column%  nc        total number of columns to write% Excel's columns are named:% A B C ... A AA AB AC AD .... BA BB BC ...% Offset from column AFirstColOffset = double(FirstCol) - double('A');% Easy if single letter% Just convert to ASCII code, add the number of needed columns,% and convert back to a stringif nc<=26-FirstColOffset  LastCol = char(double(FirstCol)+nc-1);else  % Number of groups (of 26)  ng = ceil(nc/26);  % How many extra in this group beyond A  rm = rem(nc,26)+FirstColOffset;  LastColFirstLetter = char(double('A') + ng-2);  LastColSecondLetter = char(double('A') + rm-1);  LastCol = [LastColFirstLetter LastColSecondLetter];end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -