使用行和列的某些标题创建xls或csv文件

时间:2016-12-06 13:19:25

标签: c# matlab

我在矩阵'UserID'中有一个ID列表。我想创建一个xls或csv文件,该UserID是其标题行。行数是:2200000,列数是11.列的标签是1996年 - 2006年。我读了这页:

https://www.mathworks.com/matlabcentral/answers/101309-how-do-i-use-xlswrite-to-add-row-and-column-labels-to-my-matlab-matrix-when-i-write-it-to-excel-in-m

但是这段代码给了我错误。虽然有时行数较少,但有时却没有回答。有人会介绍一个可以执行此操作的程序吗? (使用matlab甚至是c#代码)

我写这段代码:

data=zeros(2200000,11);
data_cells=num2cell(data);
col_header={'1996','1997','1998','1999','2000','2001','2002','2003','2004','2005','2006'};
row_header(1:2200000,1)=UserID;
output_matrix=[{' '} col_header; row_header data_cells];
xlswrite('My_file.xls',output_matrix);

我收到此错误:

  

指定的数据范围无效或太大而无法写入指定的文件格式。尝试写入XLSX文件并使用Excel A1表示法作为范围参数,例如,'A1:D4'。

1 个答案:

答案 0 :(得分:0)

当您使用xlswrite时,您受限于Excel version permits的行数:

  

阵列A的最大大小取决于相关的Excel版本。

在Excel 2013中,最大值为1048576,比您的2200000x11矩阵少1151424行。

您最好使用csvwrite导出数据,并参阅其中的提示:

  

csvwrite不接受输入矩阵M的单元格数组。要导出仅包含数字数据的单元格数组,请在调用csvwrite之前使用cell2mat将单元格数组转换为数字矩阵。要导出具有混合字母和数字数据的单元格数组......您必须使用low-level export functions来编写数据。

修改

在您的情况下,您应至少更改代码的这一部分:

col_header = 1996:2006;
output_matrix=[0, col_header; row_header data];

并且您不需要将output_matrix定义为单元格数组(并且不需要data_dells)。但是,您可能还必须将UserID转换为数字变量。