【问题标题】:How to modify my MatLab script to correctly write to Excel?如何修改我的 MatLab 脚本以正确写入 Excel?
【发布时间】:2016-07-05 22:03:16
【问题描述】:

所以我基本上在 MatLab 中有一个小脚本,我在一个更大的程序中使用它。该脚本实质上一直在将数据写入 Excel 文件。

脚本横向跨单元格写入数据,如下:

function writevar(x,k,filename)
    col = char(64+k);
    N = size(x,1);
    Rg = sprintf([col '1:' col '%i' ],N);
    xlswrite(filename,x,Rg)
end

在 A-Z 列之间写入数据时,该脚本可以完美运行。但是,一旦到达 Z 列,它就会崩溃。我如何修改脚本,以便它可以继续在 Z 列之外写入 AA、AB 等(它需要一直向下到 CR)。

谢谢。

【问题讨论】:

  • 你的问题是char(64+k)这行。一旦您到达Z (90) 的 ASCII 代码,您将获得 [ (91) 的 ASCII 代码。您需要处理这种情况,在左侧添加第二个字符并将第一个字符重置为 64(ASCII 表示“A”)。这样你就可以毫无问题地达到 ZZ。
  • @BlackAdder 啊我明白了,谢谢!

标签: matlab xls


【解决方案1】:

您正在正确处理[1, 26] 范围内的k 值。据推测,AA 列在您的输入中将是 k = 27,因此您需要对此进行一些特殊的数学运算。这是一个在一般情况下应将 k 转换为列名的 sn-p:

k = k - 1; % Convert to zero-based for ease of processing
col = '';
while k ~= 0
    % Prepend higher digits
    col = [char(mod(k, 26) + 65) col];
    k = floor(k / 26);
end

【讨论】:

    【解决方案2】:

    处理此问题的一种方法(请参阅 BlackAdder 的评论)是

    function writevar(x,k,filename)
      if (k > 26) {
        col = [char(64+ceil(k/26)) char(64+mod(k,26))];
      else
        col = [char(64+k);
      end
      N = size(x,1);
      Rg = sprintf([col '1:' col '%i' ],N);
      xlswrite(filename,x,Rg)
    end
    

    【讨论】:

    • 此解决方案仅适用于“ZZ”列。否则请参阅疯狂物理学家的回答。
    • 感谢您的回答!看看它是如何完成的还是很有帮助的!
    • 我强烈怀疑您的代码无法正常工作。上次我检查时,花括号仅用于 MATLAB 中的单元格数组。
    猜你喜欢
    • 2023-01-05
    • 2023-02-14
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多