Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中创建Excel文件时,如何解决数据丢失的问题?

我曾发布过一个与绘制数据有关类似问题 ,现在我想知道在使用XLSWRITE函数将数据输出到Excel文件时如何处理丢失的数据。

我有两组长度不同的数据(在上面我链接到的问题中进行了描述)。我试图在数据丢失的时候用零替换较小的文件。这是我尝试使用的代码:

newfile2 = zeros(144,20); [ts,ifile1,ifile2] = intersect(file1(:,1),file2(:,1)); newdfile2(ifile2,:) = file2; 在这里,我已经使用DATENUM将列1的数据转换为数字。因此, ifile2为我提供了两个文件共有的时间索引。问题是我在第3行收到此错误:

((??? Subscripted assignment dimension mismatch. )) 这是因为file2的大小是130×20 ,但是我的file1的大小是144×20 。我还尝试了使用ISMEMBER的另一种方法来查找丢失的索引,但仍然遇到相同的错误。

有人可以给我一些指导吗?


回答:
一种允许您将“空”单元格输出到Excel工作表的解决方案是使用以下选项之一,使数据成为具有空值或空白而不是零的单元格数组:

newData = cell(size(fileData1)); %# Each cell is initialized to [] [newData{:}] = deal(''); %# Change the cell contents to an empty string [newData{:}] = deal(' '); %# Change the cell contents to a blank 然后有两种方法可以进行。如果较小文件中的时间戳只是较大文件中的时间戳的子集(即较小文件中没有时间戳, 而不是较大文件中的时间戳),则可以使用ISMEMBER函数作为如下:

t = fileData1(:,1); %# Time-stamps from file 1 index = ismember(t,fileData2(:,1)); %# Find index of common time-stamps newData(:,1) = num2cell(t); %# Copy time-stamps newData(index,:) = num2cell(fileData2); %# Copy file 2 data 但是,如果没有在更大的时间标记在较小的文件,你应该做的,而不是使用以下INTERSECT功能:

t = fileData1(:,1); %# Time-stamps from file 1 [junk,index1,index2] = intersect(t,fileData2(:,1)); %# Find indices newData(:,1) = num2cell(t); %# Copy time-stamps newData(index1,:) = num2cell(fileData2(index2,:)); %# Copy file 2 data 上面的代码将丢弃较小文件中的所有时间戳,而不是较大文件中的所有时间戳。如果要包括这些额外的数据,请包括以下附加代码(使用功能SETDIFFSORT ):

[junk,index] = setdiff(fileData2(:,1),t); %# Unique time-stamp indices newData = [newData; num2cell(fileData2(index,:))]; %# Add unique data [junk,index] = sort([newData{:,1}]); %# Sort the time-stamps newData = newData(index,:); %# Reorder the data 现在,如果你使用XLSWRITE输出newData到Excel文件,该填充单元应该显示为空,虽然XLSWRITE的文件有以下言论:
xlswrite全部功能取决于Microsoft Excel COM服务器的使用。 Windows版Excel的典型安装包括对该服务器的访问。如果您的系统没有安装用于Windows的Excel,或者COM服务器不可用,则xlswrite :
  • 以逗号分隔值(CSV)格式将矩阵M作为文本文件写入。
  • 忽略工作表和范围参数。
  • 如果输入矩阵M是单元格数组,则会生成错误。
如果您的系统安装了Microsoft Office 2003软件,但是您要创建Excel 2007格式的文件,则必须安装Office 2007兼容性包。

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:32


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.