我有一个包含50个DAT文件的目录,每个文件都有一个基本的xlsx文件。我需要将这50个DAT文件的一个工作簿作为目录中每个文件夹中的独立工作表。工作表应使用DAT文件中的列3,4,5,它们是制表符分隔的。工作表应有6列。前三个将从目录中的基本xlsx文件中获取。第4-6列应具有来自.DAT文件的第3-5列的值。我在MATLAB中编写了一个代码来完成这项工作。每次我运行它,程序崩溃。我收到的错误是
使用xlswrite时出错(第219行) 调用错误,调度异常: 来源:Microsoft Excel 说明:文档未保存。 帮助文件:xlmain11.chm 帮助上下文ID:0。
代码如下:在代码中,files_larswg是基础xlsx文件。如果我有10个类似的目录,是否有procesto纠正错误并使该过程成为批处理过程。
date=xlsread('files_larswg.xlsx',1,'A2:C18251');
header_tree={ 'da' , 'mo', 'year', 'tminC', 'tmaxC','prcpmm'};
for k=1:50
k
fileID =fopen(sprintf('FortWayneWG%d.dat',k+516));
data = textscan(fileID,'%*d %*d %f %f %f');
fclose(fileID);
data=cell2mat(data);
sheet_no=sprintf('sheet%d',k);
xlswrite('FWYLARSWG_50set.xlsx', data, sheet_no,'D2:F18251');
xlswrite('FWYLARSWG_50set.xlsx', header_tree, sheet_no,'A1:F1');
xlswrite('FWYLARSWG_50set.xlsx', date, sheet_no,'A2:C18251');
端
答案 0 :(得分:1)
每次使用xlswrite时,你正在做的是打开一个excel实例,尝试将所有内容写入文件,关闭文件,然后重新打开文件再次执行此操作。您的操作系统错误(假设您正在使用Windows)因为文件被锁定在Windows中。
您应该使用excel中的基础ActiveXServer,将所有标签写入电子表格一次,然后保存。
你的代码应该广泛地读到这样的东西。
创建一个excel对象并设置一个全新的工作簿。
e = actxserver('Excel.Application');
e.Visible = 1;
w=Add(e.Workbooks)
您应该随后遍历您的数据范围并写入您的数据。 此代码将为循环中的每个项添加工作表,更改工作表名称,然后在每个单元格中创建以下文本。
datasheet=Add(e.Sheets)
datasheet.Name=sheetname(n)
datasheet.Range('A1:B1').Value='test data or your range'
完成循环后,保存文件并清理excel对象。
w.SaveAs('myfile.xls')
w.Saved = 1;
w.Close;
w.delete
您也应该在Matlab帮助页面上遵循此example的模式。