【问题标题】:File Conversion Multiple .DAT files to one xlsx workbook with different sheets文件转换多个 .DAT 文件到一个具有不同工作表的 xlsx 工作簿
【发布时间】:2016-09-07 05:21:50
【问题描述】:

我有一个目录,其中包含 50 个 DAT 文件,每个文件都有一个基本的 xlsx 文件。我需要在目录中的每个文件夹中制作一个包含这 50 个 DAT 文件的工作簿作为独立工作表。工作表应使用制表符分隔的 DAT 文件中的第 3、4、5 列。工作表应有 6 列。前三个将取自目录中的基本 xlsx 文件。第 4-6 列应具有来自 .DAT 文件的第 3-5 列的值。我在 MATLAB 中编写了一个代码来做必要的事情。每次我运行它,程序都会崩溃。我收到的错误是

使用 xlswrite 时出错(第 219 行) 调用错误,调度异常: 资料来源:微软 Excel 说明:文档未保存。 帮助文件:xlmain11.chm 帮助上下文 ID:0。

代码如下: 代码中files_larswg 是基本的xlsx 文件。如果我有 10 个类似的目录,是否有一个过程来纠正错误并使该过程成为批处理过程。

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');

结束

【问题讨论】:

    标签: matlab excel batch-processing vba


    【解决方案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 的模式。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2018-08-25
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多