1

我有一个函数可以生成一些变量,比如分数、对、错、未回答。使用按钮调用此函数。问题是如何每次将函数生成的这些值添加/附加到 XLSX 文件中?或者,如何创建 MAT 文件以便添加?可能的解决方案是什么?

4

2 回答 2

2

附加到 xls 文件所涉及的挑战是知道其最后一行,以避免使用 xlswrite 命令覆盖数据。我建议看一下这个文件交换提交XLSAPPEND,因为它会为你处理这个问题。

于 2015-04-09T17:36:18.830 回答
0

听起来您正在运行一个 GUI,并希望将数据重复输出到 Excel 文件。可以加快文件输出的一种选择是在 GUI 处于活动状态时保持COM 服务器打开以进行输出,而不是在每次调用xlswriteor时重复打开和关闭一个xlsappend。这是一个示例脚本来说明如何执行此操作:

function excel_output_example

  % Start COM server:
  excel = actxserver('Excel.Application');
  excelWorkbook = excel.Workbooks.Add(1);
  excelSheet = excel.ActiveSheet;
  fileName = 'example.xlsx';
  rowIndex = 1;  % Keeps track of the next row to output data to

  % Create GUI:
  hFigure = figure('Position', [100 100 120 70], ...
                   'DeleteFcn', @(~, ~) stop_excel(excelWorkbook, excel));
  uicontrol(hFigure, 'Style', 'pushbutton', ...
                     'Position', [20 20 80 30 ], ...
                     'String', 'Add to Excel', ...
                     'Callback', @output_to_excel);

  function output_to_excel(~, ~)  % Adds a random value to the next row in column A
    excelSheet.Range(sprintf('A%d', rowIndex)).Value = rand();
    rowIndex = rowIndex+1;
  end

  function stop_excel(workbookObj, comObj)  % Stops the COM server
    workbookObj.SaveAs(fileName);
    workbookObj.Close();
    comObj.Quit();
    comObj.delete();
  end

end

这将打开一个带有按钮的小 GUI 窗口。每次按下按钮时,都会在 Excel 文件的 A 列中的下一个可用行中添加一个新的随机值。当 GUI 窗口关闭时,Excel 文件被保存并且 COM 服务器停止。例如,在按下按钮 5 次并关闭 GUI 后,您将在 Excel 文件中看到如下内容:

在此处输入图像描述

于 2017-08-30T17:56:10.797 回答