图片缩略图

xlsappend.

version 1.1.0.1 (6.36 KB) by 布雷特Shoelson
将数据追加到现有Excel文件的下一个可用行,以单个呼叫呼叫。
4.8
24评级

20下载

更新2016年9月01日

查看版本历史记录

查看许可协议

语法:[success,message] = xlsappend(file,data,sheet)
XLSappend将数字数组或单元数组存储到指定Excel表的末尾。

只需要一个呼叫Excel ActxServer,因此开销小于连续XLSREAD / XLSWRITE调用。

[SUCCESS,MESSAGE]=XLSAPPEND(FILE,ARRAY,SHEET)将ARRAY写入Excel工作簿,FILE,到工作表中指定的A列和第一个未使用的行开始的区域。必须指定FILE和ARRAY。如果FILE或ARRAY为空,则抛出错误并终止XLSAPPEND。工作簿的第一个工作表是默认的。如果SHEET不存在,则在工作表集合的末尾添加一个新工作表。如果SHEET的索引大于工作表的数量,则会添加新的工作表,直到工作簿中的工作表数量等于SHEET为止。在success中返回操作成功,在message中返回任何伴随消息。对于错误,MESSAGE应该是一个结构体,包含错误消息和消息ID。

引用

布雷特Shoelson(2021)。xlsappend.(//www.tatmou.com/matlabcentral/fileexchange/28600-xlsappend), MATLAB中央文件交换。检索

评论和评级(60.

V K.

操作系统是Windows 10。
Excel版本号为1812(构建11126.20266)。
但超过版本号,我认为这是输入:
>> name{1}=input(' name \n','s');

布雷特
> >名称{1}
ans =
'Brett'
虽然剩下的三个(写入)是1x1单元格阵列:
> >名称(1)
ans =
1×1个单元阵列
{'brett'}
>> {name {1}}
ans =
1×1个单元阵列
{'brett'}
> >名称
名称=
1×1个单元阵列
{'brett'}

V K.

的输出是:
a b c d e f
1 B r e t t
2
其中,B,C,D,E是Col-Numbers和1,2,是行号。

V K.

以下是警告信息:
> > opFile =“trial2.xlsx”;
> >[成功,消息]= xlsappend (opFile,{名称{1}})
警告:无法启动Excel服务器进行导出。
XLSWRITE将尝试以CSV格式写入文件。
xlsappend(第178行)
成功=
逻辑
1
消息=
结构体字段:
邮件:'无法启动Excel服务器进行导出。↵XLSWRITE将尝试以CSV格式写入文件。
标识符:'matlab:xlswrite:nocomserver'

布雷特Shoelson

@vk:你用的是什么操作系统?什么版本的Excel?

V K.

不知道发生了什么。目前有三个问题:
1).给出不能打开excel的警告,并打开csv代替。
打印一个字母在第一行的每个col,而不是在第一行的第一个col的整个字符串。
3)。不在附加,但在代码再次运行时,再次写入第1行。

它把名字{1}(1)放在第1列,名字{1}(2)放在第2列,名字{1}(3)放在第3列,以此类推(所有这些都在第1行。
当代码再次运行时,它应该放入第二行,但是它删除了第一次运行的记录,并从头开始,再次将名称{1}(1)放在(R1,C1)上,名称{1}(2)放在(R1,C2)上,名称{1}(3)放在(R1,C3)上,以此类推。

布雷特Shoelson

@VK:我应该注意:{name{1}} == name(1),所以你的语法应该工作,事实上对我工作!(同样,确保您的excel文件存在并已关闭。)
布雷特

V K.

opFile =“trial.xlsx”;
名称{1} =输入('名字\ n','s');
[成功,消息] = xlsappend(Opfile,{name {1}})

即使没有卷曲括号,只有名称{1},它也是如此。
此外,它不是XLSX,它创建了CSV文件。
每次我运行代码时,字符串名称{1}都会在第一行本身上写入,每个列中有一个字母。
在连续运行时,名称{1}字符串应该在每次运行时都被写入到连续的行上。
但是每次运行代码时,它都会删除csv文件中以前的名称,并在第一行中写入名称{1}。

布雷特Shoelson

@vk:我刚刚尝试过它并将“brett”写入单个牢房。我的语法:
xlsappend (test.xlsx,{布雷特的})

(如果没有大括号,每一列只有一个字母。)
你能告诉我你的电话语法吗?
布雷特

V K.

你好,
如果要打印的名称是
名称='Brett';
然后xlsappend在第1个Col(A-Col)中的“B”,在第3个Col(B-Col)中的'R','e',“e”等,
而不是第1张Col(A-Col)中的'Brett'。
将其作为一个单元格数组提交{name},也给出了完全相同的结果。
如何在单个列中获取整个名称?
谢谢。

布雷特Shoelson

你介意直接给我发邮件吗?
Char ([98 17 -11 7 -10 7 7 -4 -47 45 -12 19 -12 15 -8 3 -7 8 -69 53 12 -2])
我(我们)想知道为什么你没有看到文件。您是否碰巧使用了非默认的解压缩机制?或者有可能是一些杀毒软件从zip文件中删除了附件?
谢谢,
布雷特

斯特凡诺奥兰多

@Brett.
我通过点击页面的下载按钮下载了它,我也试过用Chrome和Firefox,但结果都是一样的。
我正在使用Windows 10 Pro。
谢谢你的帮助。

斯特凡诺

布雷特Shoelson

@Stefano:
我们想知道为什么你只拿到了执照文件。你能告诉我你是怎么下载提交的,你用的是什么操作系统,什么浏览器吗?
谢谢,
布雷特

布雷特Shoelson

@Stefano:我刚刚验证了我可以看到xlsappend文件,并且当我提取它时它包含在zip文件中。请你再试一次,让我知道你看到了什么?
谢谢,
布雷特

斯特凡诺奥兰多

你好,
我下载了压缩文件,里面只有许可证。
我检查了旧版本,* .m文件存在。
我试图使用那个,但出现了一些问题。
你能检查一下*。M文件是否存在于zip?
提前感谢你的分享。

斯特凡诺

布雷特Shoelson

@Binu:
我需要测试你的文件,但我认为像这样的东西(在伪代码)应该工作:

myfiles = dir('*。xls');%或者你想争吵......
ii = 2:numel(myfiles)
myFiles(1).name = xlsappend(myFiles(1).name, xlsread(myFiles(ii).name);
结束

%应该将所有内容附加到第一个文件中。我认为你可以丢弃的其余部分,一旦您验证了所有预期的一切工作。

布雷特

Binu

我可以使用这个在一个循环中创建一个excel文件的多个excel文件?如果是如何。感谢你的帮助。

一个客

* *是他

它的工作原理。谢谢你!

frankenberry

谢谢布雷特。我使用下载按钮,它给了我一个zip文件,但内容只是许可证。根据您的建议,我将联系技术支持。金宝app很奇怪。

布雷特Shoelson

...我下载了这个文件,得到了一个带有许可协议和xlsappend函数的zip文件。如果下载按钮对你不起作用,我建议你打电话给技术支持。金宝app
布雷特

frankenberry

好吧。那么,右上方的大下载按钮的目的是什么呢?看起来很奇怪,大按钮是许可证,你必须到另一个标签下载,特别是因为“查看许可证”是许可证的链接。JS

布雷特Shoelson

我向你保证文件在那里;你似乎在下载时犯了一个错误。点击上面的“功能”标签——你可以看到文件。
布雷特

frankenberry

文件里除了执照什么都没有。

布雷特Shoelson

@Jalil, Hazoor, Olivier:谢谢你的评论和评分!
@Olivier: 2009 ? ?是时候更新了——从那时起我们已经走过了很长的路!
干杯,
布雷特

Olivier Doyle.

在2009A上使用,适应性最小(删除〜分配到行282上的输出)。快速工作并在需要时输出适当的错误。谢谢!

hazoor ahmad.

这是一个非常棒的函数,对我帮助很大

Jalil Sharafi.

优秀的工作。谢谢。

布雷特Shoelson

谢谢你的提示和评分!很高兴对你有帮助。布雷特

胺EL MOUATAMID

这是真的很有帮助,我花了太多的时间寻找一个函数附加新的行excel文件,谢谢你

布雷特Shoelson

@ H.K。在附加之前,请尝试转换为char。(char(x))。如果这适合你,请告诉我!
干杯,
布雷特

H.K.SARDANA

我有一个巨大的两个列数组,由字符串(col 1)和数字数据(col2)组成....如何将整个数组附加...作为字符串不是函数的有效输入...有帮助帮助!

布雷特Shoelson

@Kristen,
首先,这是一个警告,而不是错误。您可以抑制它(Docsearch“抑制警告”)或忽略它,直到Nargchk真的被贬值,那么您可以使用Narginchk替换Nargchk呼叫。XLSappend将继续工作(并抛出警告),直到发生。或者你现在可以继续替代。
重复呼叫失败的问题与警告无关。我认为您需要确保XLSAPPEND在您的MATLAB路径上(docsearch“MATLAB路径”)。我认为你在某处改变目录,MATLAB失去了那个文件的链接。
问候,
布雷特

Kristen Farrell.

我是Matlab的新手,我无法让这个功能工作。
当我运行这个代码,我得到以下错误:

警告:Nargchk将在将来的释放中删除。相反,使用narginchk或nargoutchk。
>在xlsappend(第138行)
警告:Nargchk将在将来的释放中删除。相反,使用narginchk或nargoutchk。
>在xlsappend(第139行)
使用xlsappend时出错(第139行)
输入参数不足。

尽管存在此错误,当我回到我写的脚本时,“xlsappend”工作很大,并将我的变量保存到Excel。
这就是我在我的代码中使用xlsappend的方式:

[success, message] = xlsappend('fileName',excelVariables,2);

但是一旦我的变量清除了下一个分析,否则不再识别XLSappend,除非我重复整个过程。错误读取:

未定义的函数或变量'xlsappend'。

我想在我自己的代码中调用这个函数,以便这可以自动化,但由于这个函数不断抛出相同的错误,这停止了我的脚本从完成。

请帮助!
我正在使用Matlab版本2016b。

布雷特Shoelson

@Maria:
要将字符串写入单个单元格,请将它们提交到单元格数组中。例如:

xlsappend('myExcelDoc.xlsx', {'test1', 'test two'})

HTH,
布雷特

玛丽亚Jaramillo

嗨布雷特!问题是我如何让它将字符串数据分组到每个单元格中?我能够使它工作,除了为0的值,它为每个数字取一个单元格。

布雷特Shoelson

@Madina,
是的,这是基于ActiveX的解决方案,并在PC上运行。对不起 - 我没有一个版本,它将在Mac上工作。(不确定Linux。)
布雷特

麦地那Makhmutova

这个可以在Mac上运行吗?
我的电脑上有2011版和2017版的Mac版Excel。
我一直得到一个错误:
"警告:无法启动Excel服务器进行导出。
xlswrite将尝试以csv格式写入文件。“
如果我使用xlswrite,会得到相同的错误。是不是因为这些函数不适合Mac?

Michal Dobai.

布雷特Shoelson

@Vikram:
是的,2009a是很久以前的事了。您可能可以改变一些东西使它在那个版本中工作,但我写它是为了MATLAB的一个“现代”会议。;)
对于一件事,第282行使用TILDE进行不需要的输出:
[~, n, e] = fileparts(filePath);
稍后介绍过。尝试用以下方式更换:
[junk, n, e] = fileparts(filePath);
布雷特

Vikram Baliga

获取此错误:错误:文件:xlsappend.m行:282列:11
表达式或语句是不正确的 - 可能不平衡(,{或[。

使用MATLAB R2009a。是版本不兼容吗?

dulara de zoysa

Lukas Tietz.

chetankumar vegad.

谢谢

凯尔里根

Jibran Shahid.

做得好 ...

巴黎

塞勒斯

工作好,谢谢

太多时间得到了保存。谢谢你。

罗马

极好的!

Aditya

安迪年代

属性使用者是问题。我想你必须使用选择底部小区的方法(例如,。a64000)并执行xlup以找到不包含数据的下一行。

如果通过选择标题来格式化整个列,则没有问题,因为Usserrange不算为自整个工作表具有格式化。

安迪年代

嘿,伙计,我想知道如何让它忽略格式化来决定下一行添加数据。我预先格式化了一个电子表格,它把它加到下面一行。我可以通过复制/粘贴格式的表格,每次我导入数据,但这是一种痛苦。任何帮助吗?

布雷特Shoelson

感谢您分享评级,以及您的修改建议Ralph。非常感激!
干杯,
布雷特

拉尔夫

非常有用的功能。谢谢你。

我在第160行之前添加了以下内容来创建文件,如果它不存在(由xlswrite1驱动):

如果存在~(文件,“文件”)
ExcelWorkbook = Excel.Workbooks.add;
开关ext
案例'.xls'%x11或xlworkbooknormal
XLFormat = -4143;
案例”。xlsb ' % xlExcel12
XLFormat = 50;
案例'.xlsx'%xlopenxmlworkbook
XLFormat = 51;
案例”。xlsm ' % xlOpenXMLWorkbookMacroEnabled
XLFormat = 52;
除此以外
XLFormat = -4143;
结束
ExcelWorkbook.SaveAs(文件,xlFormat);
ExcelWorkbook.Close(假);
结束

拉尔夫

非常有用的提交。只要确保文件已经存在。

Akansha Saxena

布雷特Shoelson

哈维尔,
第一次调用函数时,请确保正确指定了文件名,包括确切的扩展名。(“XLS”、“XLSX”…)。如果appendToXLS没有找到Excel文件,它将创建一个csv格式的文件并对其进行操作。如果这不能解决您的问题,请随时直接联系我。如果我有你的档案,也许能弄清楚细节。
干杯,
布雷特

javier

你好,
谢谢分享!我有一个警告,我第二次调用该函数:
警告:无法启动Excel服务器进行导出。
XLSWRITE将尝试以CSV格式写入文件。
我是否遇到了ActiveX问题。我怎么能解决它?非常感谢

Zoltan.

谢谢。

Rossella Blatt Firital.

非常好!谢谢!

MATLAB版本兼容性
用R2010A创建
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!