clc,clear originalData=readtable('aaa.xlsx'); outputData=originalData(:,1); [~,name]=xlsread('aaa.xlsx','A1:AE1'); [~,singlechoice]=xlsread('bbb.xlsx'); [~,multichoice]=xlsread('ccc.xlsx'); for i=1:4605 for j=1:30 if j<=22 outputData{i,j+1}=single_Data_index(singlechoice(j,:),originalData{i,j+1}); else outputData{i,j+1}=multi_Data_index(multichoice(j-22,:),outputData{i,j+1}); end end end writetable(outputData,'shujjichulijieguo.xlsx') xlswrite('shujjichulijieguo.xlsx',name,'Sheet1','A1'); function y=single_Data_index(in1,in2) index=find(ismember(in1,in2)); y=index; end错误使用 text 赋值右侧的值的宽度错误。赋值需要宽度为 1 的值
时间: 2024-01-31 20:04:38 浏览: 24
这个错误可能是由于 `outputData` 变量被定义为一个表格类型,但在循环中通过赋值语句将其转换为一个混合类型的矩阵。这可能会导致一些列的宽度不一致,导致错误。
您可以尝试将 `outputData` 变量在循环开始之前定义为一个空的混合类型矩阵,然后在循环中使用索引来分配值。这样可以确保每个单元格都是标量。例如,可以将以下两行代码添加到循环之前:
```
outputData = cell(size(originalData,1),size(originalData,2));
outputData(:,1) = table2cell(originalData(:,1));
```
这将创建一个与 `originalData` 相同大小的空混合类型矩阵,并将第一列的数据从表格类型转换为混合类型。接下来,在循环中使用索引来分配值,例如:
```
outputData{i,j+1} = {single_Data_index(singlechoice(j,:),originalData{i,j+1})};
```
注意,这里将值包装在花括号中,以确保每个单元格都是一个单元素的单元格数组。同样,对于多选项数据,您可以使用以下代码来分配值:
```
outputData{i,j+1} = {multi_Data_index(multichoice(j-22,:),outputData{i,j+1})};
```
最后,将 `writetable` 函数替换为 `cell2table` 函数,以便将混合类型矩阵转换回表格类型。例如:
```
outputTable = cell2table(outputData,'VariableNames',originalData.Properties.VariableNames);
writetable(outputTable,'shujjichulijieguo.xlsx');
```
这样,您就可以将处理后的数据写入 Excel 文件,而不会遇到宽度错误的问题。