针对大量数据,MATLAB生成EXCEL文件并进行排版处理的源码

#MATLAB生成EXCEL文件并进行排版处理的源码

项目要求:给定某海洋站潮位数据在一年之年的每分钟潮位数据(一共有24×60×365=525600个数),txt格式,要求制作出海洋站该年份的潮汐表
实现方案:MATLAB对该txt文件进行处理,生成excel工作簿,每一张工作表为潮位
一 天之内的数据,一共365张工作表。每张表即24*60=1440个数据,横坐标为分钟,纵坐标为小时,还要包括有经纬度、日期、所在时区等信息
程序实现功能:
1、matlab生成excel表格 actxserver(‘excel.application’)
2、matlab设置excel单元格的列高、行宽、横向对齐方式、垂直对齐方式、单元格字体大小、是否加粗等操作,见程序 单元格参数设置部分
3、matlab实现对excel表格的合并单元格、统一单元格的数值显示位数(0000格式) 等操作 见程序,NumberFormatLocal=‘0000’
4、实现当前天数到日期转换 例如第35天→2019/02/04,见程序,datestr()
5、数字到字符的转变 见程序,num2str()、cellstr()
201685234@qq.com

%%用A4纸张打印出来
clc
clear

A=load ('某某港原始数据.txt');   %调整下潮汐表每分钟数据格式
A_1=A(:,5:64);
A_2=zeros(17520,30);
for i=1:8670
    A_2(2*i-1,:)=A_1(i,1:30);
    A_2(2*i,:)=A_1(i,31:60);
end

AT=load ('某某港高低潮数据.txt');
AT_1=AT(:,26:33);
chaote=cell(365,8);
for jj=1:365
    for kk=1:4
      chaote{jj,2*kk-1}=num2str(AT_1(jj,2*kk-1),'%04d');
      chaote{jj,2*kk}=num2str(AT_1(jj,2*kk));
    end
end


zongriqi=365;
%表中与表头部分,写入表的实际值和表头的横坐标
  fenzhong=cell(1,30);
  for j=0:29
  fen1=num2str(j);fen2=num2str((j+30));
  fen=strcat(fen1,'\',fen2);
  fenzhong{1,j+1}=fen;
  end
  for i=1:zongriqi                %每一天做为一页,写入表中实际数据和表横坐标“分钟”
  B=A_2(48*(i-1)+1:48*i,1:30);
  data=num2str(i);
  Sheet=strcat('Sheet',data);
  xlswrite('潮汐表.xlsx',B,Sheet,'C10:AF57');         %写入实际数据
  xlswrite('潮汐表.xlsx',fenzhong,Sheet,'C9:AF9');   %写入表的横坐标
  end
 
file_path=[pwd,'\潮汐表.xlsx'];              %设置当前路径
hExcel=actxserver('excel.application');     %创建一个EXCEL服务器,并返回句柄
set(hExcel,'Visible',1);                    %设置Excel服务器为可见状态
hWorkbooks=hExcel.Workbooks.Open(file_path); %打开文件
hSheets=hExcel.ActiveWorkBook.Sheets;        %返回当前工作表句柄  

for k=1:zongriqi                                %每一天做为一页,写入表中数据
  hSheetk=hSheets.Item(k);               %返回第k个表格句柄
  hSheetk.Activate;                      %激活该表格
  hSheetk.Range('C1:AF58').ColumnWidth=4;  %设置Range对象的列宽
  hSheetk.Range('C1:AF58').RowHeight=25;   %设置Range对象的行高
  hSheetk.Range('C1:AF58').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('C1:AF58').Font.size=14;  %设置单元格字体大小
  hSheetk.Range('C1:AF58').HorizontalAlignment=3;  %设置单元格对齐方式横向居中
  hSheetk.Range('C1:AF58').VerticalAlignment=2;  %设置单元格对齐方式竖直方向居中
  %hSheetk.Range('C1:AF49').Font.bold=2;   %设置单元格字体格式为加粗
  hSheetk.Range('C9:AF9').Font.size=9;  %设置单元格字体大小
  
%表头部分,包括“某某港(中文、英语,居中)”
  hSheetk.Range('A1:AF2').MergeCells=1;  %合并单元格
  hSheetk.Range('A1:AF2').Value='某某港';  %写入单元格内容
  hSheetk.Range('A3:AF3').MergeCells=1;  %合并单元格
  hSheetk.Range('A3:AF3').Value='XX_PORT';  %写入单元格内容  
  hSheetk.Range('A1:AF2').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('A1:AF2').Font.size=36;  %设置单元格字体大小
  hSheetk.Range('A3:AF3').Font.size=18;  %设置单元格字体大小
  hSheetk.Range('A1:AF3').HorizontalAlignment=3;  %设置单元格对齐方式,居中
  hSheetk.Range('A1:AF3').VerticalAlignment=2;  %设置单元格对齐方式,居中
%表头部分,包括“2019年1月潮汐表  经纬度xx′S,xxE”  1日 
  hSheetk.Range('A4:D4').MergeCells=1;  %合并单元格
  Num=datenum('1-January-2019');
  num=Num+k-1;
  date_str=datestr(num,'yyyy/mm/dd');
  hSheetk.Range('A4:D4').MergeCells=1;  %合并单元格
  hSheetk.Range('A4:D4').Value=date_str;  %写入当前日期
  hSheetk.Range('M4:R4').MergeCells=1;  %合并单元格
  hSheetk.Range('M4:R4').Value=xxS,xx′E';  %写入当前经纬度
  hSheetk.Range('A4:D4').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('A4:D4').Font.size=22;  %设置单元格字体大小
  hSheetk.Range('A4:D4').HorizontalAlignment=3;  %设置单元格对齐方式,居中
  hSheetk.Range('A4:D4').VerticalAlignment=2;  %设置单元格对齐方式,居中  
%表头部分,写入表的纵坐标,小时
  for s=1:24
      shi1=num2str((2*s+8));shi2=num2str((2*s+9));shi3=num2str((s-1));
      shi=strcat('B',shi1,':','B',shi2);
      hSheetk.Range(shi).MergeCells=1;  %合并单元格
      hSheetk.Range(shi).Value=shi3;  %写入单元格内容
  end
  hSheetk.Range('B10:B57').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('B10:B57').Font.size=22;  %设置单元格字体大小
  hSheetk.Range('B10:B57').Font.bold=2;   %设置单元格字体格式为加粗
  hSheetk.Range('B10:B57').HorizontalAlignment=3;  %设置单元格对齐方式
  hSheetk.Range('B10:B57').VerticalAlignment=2;  %设置单元格对齐方式
%表头部分,写入表的横纵坐标意义,小时\分钟
  hSheetk.Range('B8:B9').MergeCells=1;  %合并单元格
  hSheetk.Range('B8:B9').Value='H\M';  %写入单元格内容
  hSheetk.Range('B8:B9').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('B8:B9').Font.size=16;  %设置单元格字体大小
  hSheetk.Range('B8:B9').Font.bold=2;   %设置单元格字体格式为加粗
  hSheetk.Range('B8:B9').HorizontalAlignment=3;  %设置单元格对齐方式
  hSheetk.Range('B8:B9').VerticalAlignment=2;  %设置单元格对齐方式
%表头部分,写入表的横纵坐标含义,上排0:29各分钟,下排30:59各分钟
  hSheetk.Range('C8:AF8').Value=0:1:29;  %写入单元格内容
  hSheetk.Range('C9:AF9').Value=30:1:59;  %写入单元格内容
  hSheetk.Range('C8:AF9').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('C8:AF9').Font.size=14;  %设置单元格字体大小
  hSheetk.Range('C8:AF9').Font.bold=2;   %设置单元格字体格式为加粗
  hSheetk.Range('C8:AF9').HorizontalAlignment=3;  %设置单元格对齐方式
  hSheetk.Range('C8:AF9').VerticalAlignment=2;  %设置单元格对齐方式  
%表头表尾部分,将表的最顶端的上边框与最底端的下边框加粗
  hSheetk.Range('B8:AF8').Borders.Item(3).Weight=4;   %设定表格的上边框为线段加粗
  hSheetk.Range('B57:AF57').Borders.Item(4).Weight=4; %设定表格的下边框为线段加粗
%表尾部分,写入时区与潮高基准面
  hSheetk.Range('B58:G58').MergeCells=1;  %合并单元格
  hSheetk.Range('B58:G58').Value='Time Zone: -1100';  %写入单元格内容
  hSheetk.Range('S58:AF58').MergeCells=1;  %合并单元格
  hSheetk.Range('S58:AF58').Value='Tidal high datum: 83cm below average sea level';  %写入单元格内容
  hSheetk.Range('B58:AF58').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('B58:AF58').Font.size=14;  %设置单元格字体大小
  hSheetk.Range('B58:AF58').Font.bold=2;   %设置单元格字体格式为加粗
  hSheetk.Range('B58:AF58').RowHeight=35;  %设置单元格的行高
  hSheetk.Range('B58:AF58').HorizontalAlignment=3;  %设置单元格对齐方式
  hSheetk.Range('B58:AF58').VerticalAlignment=2;  %设置单元格对齐方式  
%表头部分,写入潮汐表每天的最高潮与对应潮时
  hSheetk.Range('D6:H6').MergeCells=1;  %合并单元格
  hSheetk.Range('D6:H6').Value='Tide time(h:m)';  %写入单元格内容,潮时表头
  hSheetk.Range('D7:H7').MergeCells=1;  %合并单元格
  hSheetk.Range('D7:H7').Value='Tide height(cm)'; %写入单元格内容,潮高表头
  hSheetk.Range('D6:H7').HorizontalAlignment=2; %设置单元格对齐方式为左对齐
  hSheetk.Range('J6:AF7').HorizontalAlignment=4;  %设置单元格对齐方式为右对齐
  %将单元格合并,设定为右对齐,统一为4位数,并写入单元格内容,4个潮高对应的时间,
  hSheetk.Range('J6:K6').MergeCells=1;hSheetk.Range('M6:N6').MergeCells=1;hSheetk.Range('P6:Q6').MergeCells=1; hSheetk.Range('S6:T6').MergeCells=1;
  hSheetk.Range('J6:K6').NumberFormatLocal='0000';hSheetk.Range('M6:N6').NumberFormatLocal='0000';%格式统一为4位数
  hSheetk.Range('P6:Q6').NumberFormatLocal='0000';hSheetk.Range('S6:T6').NumberFormatLocal='0000';%格式统一为4位数
  hSheetk.Range('J6:K6').Value=cellstr(chaote{k,1});hSheetk.Range('M6:N6').Value=num2str(chaote{k,3},'%04d'); %写入潮时
  hSheetk.Range('P6:Q6').Value=num2str(chaote{k,5},'%04d');hSheetk.Range('S6:T6').Value=num2str(chaote{k,7},'%04d'); %写入潮时
  %将单元格合并,设定为右对齐,并写入单元格内容,4个潮高
  hSheetk.Range('J7:K7').MergeCells=1;hSheetk.Range('M7:N7').MergeCells=1;hSheetk.Range('P7:Q7').MergeCells=1; hSheetk.Range('S7:T7').MergeCells=1;
  hSheetk.Range('J7:K7').Value=num2str(chaote{k,2});hSheetk.Range('M7:N7').Value=num2str(chaote{k,4});%写入潮高  
  hSheetk.Range('P7:Q7').Value=num2str(chaote{k,6});hSheetk.Range('S7:T7').Value=num2str(chaote{k,8});%写入潮高 
  hSheetk.Range('D6:AF7').Font.name='宋体';  %设置单元格字体大小
  hSheetk.Range('D6:H7').Font.size=14;  %设置单元格字体大小,表头大小
  hSheetk.Range('D6:H7').Font.bold=2;   %设置单元格字体格式为加粗,对表头进行加粗
  hSheetk.Range('J6:AF7').Font.size=20;  %设置单元格字体大小,潮高和潮时大小
end

Quit(hExcel);
delete(hExcel);
在这里插入代码片
  • 19
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值