本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

writetable

将表写入文件

说明

示例

writetable(T) 将表 T 写入逗号分隔的文本文件。文件名为表的工作区变量名称,附加扩展名 .txt。如果 writetable 无法根据输入表名称构造文件名,那么它会写入 table.txt 文件中。

T 中每个变量的每一列都将成为输出文件中的列。T 的变量名称将成为文件第一行的列标题。

writetable(T,filename) 写入具有 filename 指定的名称和扩展名的文件。

writetable 根据指定扩展名确定文件格式。扩展名必须是下列格式之一:

  • .txt.dat.csv(适用于带分隔符的文本文件)

  • .xls.xlsm.xlsx(适用于 Excel® 电子表格文件)

  • .xlsb(适用于安装了 Windows® Excel 的系统上支持的 Excel 电子表格文件)

示例

writetable(___,Name,Value) 通过一个或多个 Name,Value 对组参数指定的其他选项将表写入文件中,并且可以包含以前语法中的任何输入参数。

例如,您可以指定是否将变量名称写入为输出文件中的列标题。

示例

全部折叠

创建一个表。

T = table(['M';'F';'M'],[45 45;41 32;40 34],...
    {'NY';'CA';'MA'},[true;false;false])
T=3×4 table
    Var1      Var2       Var3     Var4 
    ____    ________    ______    _____

     M      45    45    {'NY'}    true 
     F      41    32    {'CA'}    false
     M      40    34    {'MA'}    false

将表写入逗号分隔的文本文件,并显示文件内容。

writetable(T)

writetable 将输出名为 T.txt 的文本文件。

type 'T.txt'
Var1,Var2_1,Var2_2,Var3,Var4
M,45,45,NY,1
F,41,32,CA,0
M,40,34,MA,0

writetable 会向变量名称 Var2 附加一个唯一的后缀(位于两列相应数据的上方)。

创建一个表。

T = table(['M';'F';'M'],[45 45;41 32;40 34],...
    {'NY';'CA';'MA'},[true;false;false])
T=3×4 table
    Var1      Var2       Var3     Var4 
    ____    ________    ______    _____

     M      45    45    {'NY'}    true 
     F      41    32    {'CA'}    false
     M      40    34    {'MA'}    false

将表写入名为 myData.txt 的以空格分隔的文本文件并显示文件内容。

writetable(T,'myData.txt','Delimiter',' ')  
type 'myData.txt'
Var1 Var2_1 Var2_2 Var3 Var4
M 45 45 NY 1
F 41 32 CA 0
M 40 34 MA 0

writetable 会向变量名称 Var2 附加一个唯一的后缀(位于两列相应数据的上方)。

创建一个表。

LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

T = table(Age,Height,Weight,BloodPressure,...
    'RowNames',LastName)
T=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38       71       176       124     93  
    Johnson     43       69       163       109     77  
    Williams    38       64       131       125     83  
    Jones       40       67       133       117     75  
    Brown       49       64       119       122     80  

将表 T 写入名为 myPatientData.dat 的逗号分隔的文本文件,并显示文件内容。

writetable(T,'myPatientData.dat','WriteRowNames',true)  
type 'myPatientData.dat'
Row,Age,Height,Weight,BloodPressure_1,BloodPressure_2
Smith,38,71,176,124,93
Johnson,43,69,163,109,77
Williams,38,64,131,125,83
Jones,40,67,133,117,75
Brown,49,64,119,122,80

包含行名称的第一列的列标题为 Row。这是从属性 T.Properties.DimensionNames 获取的表的第一个维度名称。

将表中的英语日期转换为德语,并将表写入文件。

创建包含英语日期的 datetime 数组的表。创建要与日期一起使用的数值数据的列向量。

D = datetime({'01-Jan-2014';'01-Feb-2014';'01-Mar-2014'});
D.Format = 'dd MMMM yyyy';
X1 = [20.2;21.6;20.7];
X2 = [100.5;102.7;99.8];
T = table(D,X1,X2)
T = 

           D             X1      X2  
    ________________    ____    _____

    01 January 2014     20.2    100.5
    01 February 2014    21.6    102.7
    01 March 2014       20.7     99.8

将表写入一个文本文件。使用 DateLocale 名称-值对组参数将日期的区域设置指定为德语,并在文本文件中显示日期。

writetable(T,'myfile.txt','DateLocale','de_DE');
type myfile.txt
D,X1,X2
01 Januar 2014,20.2,100.5
01 Februar 2014,21.6,102.7
01 März 2014,20.7,99.8

当您的数据包含外语或非 ASCII 字符时,请使用 encoding 参数以确保文件正确写入。首先,将提供的表加载到工作区。然后使用默认编码将该表写入文件。最后,使用 'UTF-8' 编码写入该表,并检查结果。

加载包含表 T 的 Table_Japanese_Characters.mat。下面显示了表的预览。请注意,该表包含两列日语字符。

load('Table_Japanese_Characters.mat')

将表写入一个文件。writetable 函数将使用系统默认编码编写文件。根据您的系统设置,结果可能有所不同。要检查生成的文件,请使用 readtable 函数将该表重新读取到工作区。请注意 writetable 未成功写入包含外语字符的列(第 1 列和第 3 列)。

writetable(T,'myTable.txt')
myTable = readtable('myTable.txt')
myTable=9×3 table
      A        B          C   
    _____    ______    _______

    ''     458.98    ''  
    ''     530.14    ''  
    ''      289.4    ''  
    ''      434.81    ''
    ''    186.44    '' 
    ''           0    ''   
    ''      231.29    ''
    ''      311.86    ''
    ''     239.93    ''   

如果您的表包含外语或非 ASCII 字符,必须使用 'Encoding' 参数以确保正确写入数据。将 'Encoding' 设置为 'UTF-8',以支持较广泛的外语和非 ASCII 字符。要检查生成的文件,请使用 readtable 函数将该表重新读取到工作区。使用正确的编码参数,writetable 函数可以成功写入数据。

writetable(T,'myTable_UTF8.txt','Encoding','UTF-8')
myTable_UTF8 = readtable('myTable_UTF8.txt','Encoding','UTF-8')
myTable_UTF8=9×3 table
       A         B            C     
    _______    ______    ___________

    '南西'     458.98    '冬の嵐'    
    '南東'     530.14    '冬の嵐'    
    '南東'      289.4    '冬の嵐'    
    '西'       434.81    '機器の故障' 
    '中西部'    186.44    '深刻な嵐'  
    '西'            0    '攻撃'      
    '西'       231.29    '機器の故障' 
    '西'       311.86    '機器の故障' 
    '北東'     239.93    '火災'      

创建一个表。

T = table(['M';'F';'M'],[45;41;36],...
    {'New York, NY';'San Diego, CA';'Boston, MA'},[true;false;false])
T=3×4 table
    Var1    Var2          Var3           Var4 
    ____    ____    _________________    _____

     M       45     {'New York, NY' }    true 
     F       41     {'San Diego, CA'}    false
     M       36     {'Boston, MA'   }    false

将表写入一个名为 myData.csv 的逗号分隔的文本文件,并查看文件内容。使用 'QuoteStrings' 名称-值对组参数以确保第三列中的逗号不被视为分隔符。

writetable(T,'myData.csv','Delimiter',',','QuoteStrings',true)
type 'myData.csv'
Var1,Var2,Var3,Var4
"M",45,"New York, NY",1
"F",41,"San Diego, CA",0
"M",36,"Boston, MA",0

创建一个表。

T = table(['M';'F';'M'],[45 45;41 32;40 34],...
    {'NY';'CA';'MA'},[true;false;false])
T=3×4 table
    Var1      Var2       Var3     Var4 
    ____    ________    ______    _____

     M      45    45    {'NY'}    true 
     F      41    32    {'CA'}    false
     M      40    34    {'MA'}    false

将表写入到名为 myData.xls 的电子表格中。将第一张电子表格中的数据包含在 5×5 的区域中,转角位于 B2F6。您可以通过指定对应于工作表的索引来更改要写入到的工作表。

writetable(T,'myData.xls','Sheet',1,'Range','B2:F6')

Excel® 使用 #N/A 填充电子表格的 B6F6 行,因为指定的范围大于输入表 T 的大小。

您可以写入包含变量名称的表格数据,变量名称可以包含任何字符(包括空格和非 ASCII 字符)。创建具有任意变量名称的表,并将该表写入一个文本文件。然后,读回表格数据,同时保留原始变量名称。

创建一个表,其中包含三个具有任意变量名称的变量。第一个和第三个变量名称包含空格和非 ASCII 字符。

LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'};
Age = [38;43;38;40;49];
Smoker = logical([1;0;1;0;1]);
varNames = {'Last Name','Age','Smoker (1 or 0)'};
T = table(LastName,Age,Smoker,'VariableNames',varNames)
T=5×3 table
     Last Name     Age    Smoker (1 or 0)
    ___________    ___    _______________

    {'Sanchez'}    38          true      
    {'Johnson'}    43          false     
    {'Li'     }    38          true      
    {'Diaz'   }    40          false     
    {'Brown'  }    49          true      

将数据写入文件 'sampletable.txt'

writetable(T,'sampletable.txt')

使用 readtable 读回表格数据。默认情况下,MATLAB® 将任何包含空格和非 ASCII 字符的变量名称转换为有效的 MATLAB® 标识符。例如,MATLAB® 将变量名称 'Last Name' 转换为 'LastName',将 'Smoker (1 or 0)' 转换为 'Smoker_1or0_'。要在保留变量名称的同时读取表格数据,请将 'PreserveVariableNames' 参数设置为 true

T_preserve = readtable('sampletable.txt','PreserveVariableNames',true)
T_preserve=5×3 table
     Last Name     Age    Smoker (1 or 0)
    ___________    ___    _______________

    {'Sanchez'}    38            1       
    {'Johnson'}    43            0       
    {'Li'     }    38            1       
    {'Diaz'   }    40            0       
    {'Brown'  }    49            1       

输入参数

全部折叠

输入数据,指定为表。

文件名,指定为字符向量或字符串标量。

根据您写入的位置,filename 可以采用以下形式之一。

位置

形式

当前文件夹

要写入当前文件夹,请在 filename 中指定文件名。

示例:'myTextFile.csv'

其他文件夹

要写入不同于当前文件夹的文件夹,请在 filename 中指定完整或相对路径名称。

示例:'C:\myFolder\myTextFile.csv'

示例:'myFolder\myExcelFile.xlsx'

远程位置

要写入远程位置,filename 必须包含指定为统一资源定位器 (URL) 形式的文件的完整路径:

scheme_name://path_to_file/my_file.ext

根据您的远程位置,scheme_name 可以是下表中的值之一。

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob Storagewasb, wasbs
HDFS™hdfs

有关详细信息,请参阅处理远程数据

示例:'s3://bucketname/path_to_file/my_file.xlsx'

  • 如果 filename 包含文件扩展名,则写入函数基于扩展名确定文件格式。否则,写入函数会创建一个逗号分隔的文本文件,并附加扩展名 .txt。您也可以指定不带文件扩展名的 filename,然后添加 'FileType' 名称-值对组参数来指示文件类型。

  • 如果 filename 不存在,则写入函数会创建该文件。

  • 如果 filename 是一个现有文本文件的名称,则写入函数将覆盖该文件。

  • 如果 filename 是一个现有电子表格文件的名称,则写入函数会将数据写入指定位置,但不会覆盖输入数据范围之外的任何值。

数据类型: char | string

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: 'WriteVariableNames',false 指示变量名称不应作为输出文件的第一行包含在内。

文本和电子表格文件

全部折叠

文件类型,指定为逗号分隔的对组,其中包含 'FileType' 和一个包含 'text''spreadsheet' 的字符向量或字符串。

'FileType' 名称-值对组必须与 filename 输入参数配合使用。如果 filename 输入参数包含标准文件扩展名,则无需指定 'FileType' 名称-值对组参数。以下标准文件扩展名由写入函数识别:

  • .txt.dat.csv(适用于带分隔符的文本文件)

  • .xls.xlsm.xlsx(适用于 Excel 电子表格文件)

  • .xlsb(适用于安装了 Windows Excel 的系统上支持的 Excel 电子表格文件)

示例: 'FileType','spreadsheet'

数据类型: char | string

指示将变量名称写入为列标题的指示符,指定为逗号分隔的对组,包含 'WriteVariableNames'truefalse

指示符

行为

true

写入函数将变量名称作为输出的列标题包含在内。这是默认行为。

false

写入函数不会在输出中包含变量名称。

指示在第一列写入行名称的指示符,指定为逗号分隔的对组,包含 'WriteRowNames'falsetrue

指示符

行为

false

writetable 不会在输出中包含 T 的行名称。这是默认行为。

true

writetable 包含 T 的行名称作为输出的第一列。

如果 'WriteVariableNames''WriteRowNames' 逻辑指示符均为 truewritetable 会将属性 T.Properties.DimensionNames 的第一个维度名称作为输出第一列的列标题。

用于写入日期的区域设置,指定为逗号分隔的对组,其中包含 'DateLocale' 和一个字符向量或字符串标量。在将 datetime 值写入文件时,请使用 DateLocale 指定 writetable 写入月和星期几的名称以及缩写所用的区域设置。该字符向量或字符串采用 xx_YY 形式,其中 xx 是用于指示语言的小写 ISO 639-1 双字母代码,YY 是用于指示国家/地区的大写 ISO 3166-1 alpha-2 代码。有关区域设置的常见值的列表,请参阅 datetime 函数的 Locale 名称-值对组参数。

当日期可以写为 Excel 格式的日期时,写入函数将忽略 'DateLocale' 参数值。

示例: 'DateLocale','ja_JP'

数据类型: char | string

仅限文本文件

全部折叠

字段分隔符,指定为逗号分隔的对组,其中包含 'Delimiter' 和一个字符向量或字符串标量(由以下设定符之一组成)。

设定符

字段分隔符

','

'comma'

逗号。这是默认行为。

' '

'space'

空格

'\t'

'tab'

制表符

';'

'semi'

分号

'|'

'bar'

垂直条

您只能将 'Delimiter' 名称-值对组用于带分隔符的文本文件。

示例: 'Delimiter','space'

数据类型: char | string

用于写入引用文本的指示符,指定为逗号分隔的对组,包含 'QuoteStrings'falsetrue。如果 'QuoteStrings'true,则写入函数将文本括在双引号中,并将显示为文本一部分的任何双引号字符替换为两个双引号字符。

您只能将 'QuoteStrings' 名称-值对组与分隔的文本文件一起使用。

与文件关联的字符编码方案,指定为由 'Encoding''system' 组成的逗号分隔对组,或指定为标准字符编码方案名称,如下表所示的值之一。当您不指定任何编码或将编码指定为 'system' 时,写入函数将使用您系统的默认编码写入该文件。

'Big5'

'ISO-8859-1'

'windows-874'

'Big5-HKSCS'

'ISO-8859-2'

'windows-949'

'CP949'

'ISO-8859-3'

'windows-1250'

'EUC-KR'

'ISO-8859-4'

'windows-1251'

'EUC-JP'

'ISO-8859-5'

'windows-1252'

'EUC-TW'

'ISO-8859-6'

'windows-1253'

'GB18030'

'ISO-8859-7'

'windows-1254'

'GB2312'

'ISO-8859-8'

'windows-1255'

'GBK'

'ISO-8859-9'

'windows-1256'

'IBM866'

'ISO-8859-11'

'windows-1257'

'KOI8-R'

'ISO-8859-13'

'windows-1258'

'KOI8-U'

'ISO-8859-15'

'US-ASCII'

 

'Macintosh'

'UTF-8'

 

'Shift_JIS'

 

示例: 'system' 使用系统默认编码。

数据类型: char | string

仅限电子表格文件

全部折叠

要写入的工作表,指定为逗号分隔的对组,包含 'Sheet' 和一个包含工作表名称或正整数(指示工作表索引)的字符向量或字符串标量。工作表名称不能包含冒号 (:)。要确定电子表格文件中工作表的名称,请使用 sheets = sheetnames(filename)。有关详细信息,请参阅 sheetnames

按名称或索引指定要写入的工作表:

  • 名称 - 如果文件中不存在指定的工作表名称,则写入函数将在工作表集合的末尾添加一个新工作表。

  • 索引 - 如果指定的工作表索引大于工作表数,则写入函数会追加空工作表,直至工作簿中的工作表数等于工作表索引。写入函数还会生成一条警告,指示已添加新工作表。

您只能将 'Sheet' 名称-值对组用于电子表格文件。

示例: 'Sheet',2

示例: 'Sheet', 'MySheetName'

数据类型: char | string | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

要写入的工作表的矩形部分,指定为逗号分隔的对组,包含 'Range' 和一个采用以下格式之一的字符向量或字符串标量。

Range 的值的格式 说明
'Corner1'

Corner1 指定要写入的区域的第一个单元格。写入函数从这个单元格开始写入数据。

示例:'Range','D2'

'Corner1:Corner2'

Corner1Corner2 是用于定义要写入区域的两个对角。例如,'D2:H4' 表示工作表上两个角落 D2H4 之间的 3×5 矩形区域。'Range' 名称-值对组参数不区分大小写,并使用 Excel A1 引用样式(请参阅 Excel 帮助)。

示例:'Range','D2:H4'

  • 如果指定的范围小于输入数据的大小,则写入函数只写入该范围能容纳的输入数据子集。

  • 如果指定的范围大于输入数据的大小,则写入函数将保留该区域的其余部分不变。

'Range' 名称-值对组只能与 Excel 文件配合使用。

示例: 'Range', 'A1:F10'

数据类型: char | string

指明在写电子表格数据时是否启动 Microsoft® Excel(Windows 版)实例的标志,指定为以逗号分隔的对组,其中包含 'UseExcel'truefalse

您可以将 'UseExcel' 参数设置为下列值之一:

  • true - 写入函数在写入文件时启动 Microsoft Excel 的实例。

  • false - 写入函数在写入文件时不启动 Microsoft Excel 的实例。在此模式下操作时,写入功能支持的文件格式和交互式功能(例如公式和宏)有所不同。

UseExcel

true

false

支持的文件格式

.xls, .xlsx, .xlsm, .xltx, .xltm, .xlsb, .ods

.xls, .xlsx, .xlsm, .xltx, .xltm

支持交互功能,例如公式和宏

在 Windows 平台上写入电子表格文件时,如果您想启动 Microsoft Excel 实例,则将 'UseExcel' 参数设置为 true

提示

  • 在电子表格文件中创建空工作表:使用 writetable 以写入空表的形式在电子表格文件中创建一张空工作表。例如,创建一张名为 'MySheetName' 的空工作表。

    writetable(table(),'empty.xls','Sheet','MySheetName')
    或者创建三张空工作表,分别称为 'Sheet1''Sheet2''Sheet3'
     writetable(table(),'empty.xls','Sheet',3)

算法

  • 如果 'WriteVariableNames''WriteRowNames' 逻辑指示符均为 true,则 writetable 函数会将属性 T.Properties.DimensionNames 的第一个维度名称作为输出第一列的列标题。

  • Excel 将 Inf 值转换为 65535。MATLAB®NaNNaT<undefined> 分类值以及 <missing> 字符串值转换为空单元格。

  • 对于 Excel 文件,writetable 将以 Excel 日期格式写入包含 datetime 数组的 table 变量。如果 table 包含年份在 1900 或 1904 之前的 datetime 数组,writetable 将以文本形式写入变量。有关 Excel 日期的详细信息,请参阅 https://support.microsoft.com/en-us/kb/214330

  • 有些情况下,writetable 函数会创建一个不能准确表示 T 的文件。当您使用 readtable 来读取该文件时,会注意到这一点。生成的表可能不具备与原始表相同的格式或内容。如果您需要保存表并在以后检索它以便与具有相同数据和组织形式的原始表精确匹配,则将其另存为 MAT 文件。在以下情况下,writetable 会编写一个不精确的表:

    • 写入文本文件时,writetable 使用 long g 格式输出数值变量,并将分类变量或字符变量作为不带引号的字符输出。

    • 对于拥有多于 1 列的变量,writetable 将一个唯一标识符追加到变量名称,以用作列标题。

    • 对于拥有多于 2 个维度的输出变量,writetable 将这些变量以二维形式输出,后继维度折叠。例如,writetable 将一个 4 x 3 x 2 的变量以 4 x 6 的大小输出。

    • 对于 cell 数据类型的变量,writetable 将每个元胞的内容作为一行,以多个字段输出。如果是数字、逻辑、字符或分类以外的内容,则 writetable 输出一个单独的空字段。

在 R2013b 中推出