用MATLAB将行插入Excel

我的Excel文件中的数据应该是有争议的(第一列中的索引)。 但是文件中缺less一些数据。 例如,#5和#6在$ 4和7之间缺失。我的目的是(1)识别缺less数据的文件;(2)缺less数据插入行使其连续。 任何人都可以告诉我如何在现有的数据添加行? 使用xlswrite我只能在文件末尾添加行或replace一些行。

编辑1:

我有另外一组索引不太直接的文件。 前三列如下所述(如Excel文件所示):

  • 第1列:年份:2003(在matlab中以数字表示)
  • 第2列:date:1 – 9月(在matlab中读取为文本)
  • 第3列:时间:1:00(1:00读为0.04167,2:00读为0.0833,不知道它是如何工作的)

那么判断它是否连续的方法将是相当复杂的,因为会有不同的年,月,日。 你能提一下这个吗?

基本上你需要读取整个数据,最好是原始(单元格)格式,添加缺less的行(相对于索引)并回写。

根据你的问题,这个代码可能工作 –

% NOTE: We are assuming that the indexing starts with 1 % Read data from input excel file with missing indices [num,txt,raw] = xlsread('input.xls'); % Error-checking if (size(num,1)-num(end,1)~=0) disp('At least one index is missing!'); end % Expand data such that all indices are covered. data1=NaN(num(end,1),size(raw,2)); data1(:,1) = 1:num(end,1); data1=num2cell(data1); k1=1; for k = 1:num(end,1) if(num(k1,1)==k) data1(k,:)= raw(k1,:); k1 = k1+1; end end % Write data xlswrite('output.xls',data1); 

编辑1:鉴于您的新要求,接下来添加其他代码。

请注意有关此代码的一些事情 –

  1. 该代码将每年的数据,而不是从特定的月份,date和时间,添加到另一个特定的月份,date和时间。 如果你想达到这个目的,请编辑相关的函数 – “create_comp_sheet”。
  2. 它保存一个名为 – “proper_base_data.xls”的中间文件,这个文件可能会在代码的末尾被删除。
 %% MAIN CODE - CODE1.M INPUT_FILENAME = 'input.xls'; % Excel file that has some missing year,date and time info OUTPUT_FILENAME = 'output.xls'; % Excel file that has data from the input file along with all the missing year,date and time info %% Base data start_year=2003; end_year=2005; proper_base_data = create_comp_sheet(start_year,end_year); xlswrite('proper_base_data.xls',proper_base_data); [num,txt,raw] = xlsread('proper_base_data.xls'); base_data=cell(size(num,1),1); for row_ID = 1:size(num,1) base_data(row_ID) = {strcat(num2str(cell2mat(raw(row_ID,1))),'-', cell2mat(raw(row_ID,2)),'-',num2str(round(24*cell2mat(raw(row_ID,3)))))}; end %% Input data [num,txt,raw] = xlsread(INPUT_FILENAME); input_data=cell(size(num,1),1); for row_ID = 1:size(num,1) input_data(row_ID) = {strcat(num2str(cell2mat(raw(row_ID,1))),'-', cell2mat(raw(row_ID,2)),'-',num2str(round(24*cell2mat(raw(row_ID,3)))))}; end %% Setup final data final_data = num2cell(NaN(size(proper_base_data,1),size(raw,2))); final_data(:,1:3) = proper_base_data; for k1=1:size(input_data,1) for k2=1:size(base_data,1) if strcmp(cell2mat(base_data(k2)),cell2mat(input_data(k1))) final_data(k2,4:end) = raw(k1,4:end); end end end %% Write final data to excel xlswrite(OUTPUT_FILENAME,final_data); 

相关function –

 function data1 = create_comp_sheet(start_year,end_year) months_string = {'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'}; date_count = [31 28 31 30 31 30 31 31 30 31 30 31]; num_hours = 24; data1=[]; for year_ID = start_year:end_year for month_ID = 1:numel(months_string) days_per_month = date_count(month_ID); if rem(year_ID,4)==0 && month_ID ==2 days_per_month = days_per_month+1; end for date_ID = 1:days_per_month year = repmat({num2str(year_ID)},[num_hours 1]); date = repmat({strcat(num2str(date_ID),'-',char(months_string(month_ID)))},[num_hours 1]); time=cell(num_hours,1); for k = 1:num_hours time(k) = {strcat(num2str(k),':00')}; end data1 = [data1 ; [year date time]]; end end end return; 

希望这可以节省你所有的麻烦!