本段程序的主要功能是:按行或者按列依次循環往表格里寫數據。
1 function main() 2 clc; 3 close all; 4 clear; 5 6 year=2017;month=12; 7 daynum=eomday(year,month); 8 % date=201712; 9 % daynum=cal_day(date); 10 11 file_test = [pwd '\test_harder.xls']; 12 try 13 Excel = actxGetRunningServer('Excel.Application'); 14 catch 15 Excel = actxserver('Excel.Application'); 16 end; 17 18 % Excel.Visible = 1; % set(Excel, 'Visible', 1); 19 20 if exist(file_test,'file'); 21 Workbook = Excel.Workbooks.Open(file_test); 22 else 23 Workbook = Excel.Workbooks.Add; 24 Workbook.SaveAs(file_test); 25 end 26 27 Sheets = Excel.ActiveWorkbook.Sheets; % Sheets = Workbook.Sheets; 28 Sheet1 = Sheets.Item(1); 29 Sheet1.Activate; 30 31 % 第一行,車號,車廂號,日期 32 Sheet1.Range('A1').Value ='車號'; 33 Sheet1.Range('B1').Value='車廂號'; 34 % xlswrite(file_test,{'車號'},'Sheet1','A1'); 35 % xlswrite(file_test,{'車廂號'},'Sheet1','B1'); 36 37 for i=1:daynum 38 a=date2str(year,month,i); 39 if i+2<27 40 Bs=[char(66+i) num2str(1)] 41 else 42 Bs=[char(65) char(40+i) num2str(1)] 43 44 end 45 Sheet1.Range(Bs).ColumnWidth = 13; 46 Sheet1.Range(Bs).HorizontalAlignment = 3; 47 Sheet1.Range(Bs).Value =a; 48 end 49 50 %第一列,共18輛車,每輛車8個車廂,即每8個單元格合並成一列車 51 train_total=18; 52 carriage_total=8; 53 54 55 for i=1:train_total 56 start_str=['A' num2str((i-1)*8+2)] 57 As=['A' num2str((i-1)*8+2) ':A' num2str(i*8+1)] 58 Sheet1.Range(As).MergeCells = 1; 59 Sheet1.Range(start_str).VerticalAlignment = 2; 60 Sheet1.Range(start_str).HorizontalAlignment = 3; 61 if i<6 62 train_num=num2str(2000+i); 63 else 64 if i<11 65 train_num=num2str(2000+i+5); 66 else 67 train_num=num2str(2000+i+10); 68 end 69 end 70 Sheet1.Range(start_str).Value =train_num; 71 % xlswrite(file_test,train_num,'Sheet1',start_str); 72 for j=1:carriage_total 73 Bs=['B' num2str((i-1)*8+1+j)] 74 carriage_num=num2str(j) 75 Sheet1.Range(Bs).Value =carriage_num; 76 % xlswrite(file_test,carriage_num,'Sheet1',Bs); 77 end 78 end 79 80 Workbook.Save; 81 82 83 function [str_cell_date]=date2str(year,month,day) 84 y=num2str(year); 85 m=num2str(month); 86 d=num2str(day); 87 str_cell_date=strcat(y,'/',m,'/',d);
ps:
1.Sheet1.Range(start_str).Value =train_num;這種格式,僅僅是對某個表格賦值,但是並沒有寫入到表格中,最后加上‘Workbook.Save;’才能把每個表格的value保存到sheet中。
2. 我最開始試着xlswrite(file_test,carriage_num,'Sheet1',Bs);直接往表格里寫內容,但是,經常出現‘The file .xlsx is not writable. It may be locked by another process.’最終也沒有找到原因和解決方法,如果有誰知道,麻煩留言。感覺.Value的賦值語句和xlswrite語句一塊用,就會比較容易出錯誤
3.這段程序最主要的功能是實現了表格的循環,start_str=['A' num2str((i-1)*8+2)] Bs=[char(66+i) num2str(1)],A,B,C等,可以用char(ASCII碼)表示,[ 字母 數據 ]可以用來表示表格的行列號。