【matlab】生成excel表格,並讀寫excel內容


 

本段程序的主要功能是:按行或者按列依次循環往表格里寫數據。

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碼)表示,[ 字母 數據 ]可以用來表示表格的行列號。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM