本段程序的主要功能是:按行或者按列依次循環往表格里寫數據。
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碼)表示,[ 字母 數據 ]可以用來表示表格的行列號。
