转至元数据结尾
转至元数据起始

ComponentOneExcelfor.NET现在可以读和写微软Excel2007OpenXml文件。 OpenXml文件是微软办公软件2007引入的一个开放的,基于标准格式的文件。OpenXml文件更容易被应用程序操作因为它是基于Xml的文件并且文件是公开的,而不是象BIFF8一样的专用的二进制格式。OpenXml文件包含大量的使用Zip压缩的XML文件。因为文件是被压缩过的,所以OpenXml文件通常比诸如.doc和.xls文件这样的传统文件更小。
.Excelfor.NET能够加载和保存OpenXml文件中的数据以及格式化的信息;但是,公式不能被加载和保存。公式是按BIFF 格式复制的是不透明的,现在为止公式还不支持OpenXml格式。如果你加载了包含公式信息的OpenXml格式文件并且保存,包含的公式就会被移除。这点和传统的.xls格式文件或者BIFF8格式文件不同,传统文件可以保留公式。
为了支持Openxml格式,C1XLBook的Load和Save方法带有FileFormat参数,这个参数用来定义加载后保存文件时文件的格式。
如果文件名没有定义,则Excelfor.NET从文件的扩展名来推断文件的格式:带有"XLSX"和"ZIP"扩展名的文件加载和保存时会被认为是OpenXml文件,而其他的文件默认就会加载和保存为BIFF8或者.xls格式的文件。例如:
C#

C#

//load and save relying on file extension c1Excel1.Load("somefile.xls"); // load biff 8 file c1Excel1.Save("somefile.xlsx"); // save file as OpenXml c1Excel1.Save("somefile.zip"); // save file as OpenXml
// load and save specifying the FileFormat

c1Excel1.Load("somefile.xls", FileFormat.Biff8); c1Excel1.Save("somefile.xlsx", FileFormat.OpenXml);
当从工作流中加载和保存文件时你也能定义文件的格式。如果没有定义FileFormat,则Excelfor.NET默认使用BIFF8格式。
注意这里有一个小的行为改变。注意看下面的语句:
C1Excel1.Save("somefile.xlsx");
在Excelfor.NET以前的版本中,上面的语句会保存为BIFF8文件(带个错误的扩展名)。现在,会保存为OpenXml文件(带有正确的扩展名)。如果你的应用程序带有类似的代码,你必须升级的时候按下面的方式修改:
C#

C#

// deliberately save file with wrong extension
C1Excel1.Save("somefile.xlsx", FileFormat.Biff8);

要导出工作簿到OpenXml文件,需要完成下面的步骤:

  1. 加载一个已经存在的工作簿:

Visual Basic

Visual Basic

Dim wb As New C1XLBook() wb.Load("C:\test.xlsx")
' or
Dim wb As New C1XLBook() wb.Load("C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml)

C#

C#

C1XLBook wb = new C1XLBook(); wb.Load(@"C:\test.xlsx");
// or
C1XLBook wb = new C1XLBook(); wb.Load(@"C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml);

  1. 导出工作簿到OpenXml文件

Visual Basic

Visual Basic

Dim wb As New C1XLBook()
' Add some content
Dim sheet As XLSheet = wb.Sheets(0)
Dim i As Integer For i = 0 To 9 sheet(i,0).Value = i + 1

Next i ' Export to OpenXml Format file wb.Save("C:\test.xlsx") ' or ' Export to OpenXml Format file
wb.Save("C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml)
C#

C#

C1XLBook wb = new C1XLBook();
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="218fe735-f4f1-4bf0-90a7-9e0ddf4e330d"><ac:plain-text-body><![CDATA[// Add some content XLSheet sheet = wb.Sheets[0]; for (int i = 0; i <= 9; i++) { sheet[i,0].Value = i + 1; } // Export to OpenXml Format file wb.Save(@"C:\test.xlsx"); // or // Export to OpenXml Format file wb.Save(@"C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml);

]]></ac:plain-text-body></ac:structured-macro>

创建小计

下面的代码举例说明了如何格式化工作簿中的单元格。

  1. 双击工具盒中的C1XLBook组件将它添加到你的窗体上。
  2. 选择View|Code并且在你的窗体上添加下面的语句:

ImportC1.C1Excel(VisualBasic) usingC1.C1Excel;(C#)

  1. 在Form_Load事件中添加下面的代码:

Visual Basic

Visual Basic

Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim book As New C1XLBook()
Dim sheet As XLSheet = book.Sheets(0) Dim totalStyle As New XLStyle(book) totalStyle.Font = New Font(book.DefaultFont, FontStyle.Bold) sheet(2, 1).Value = "Number" sheet(2, 2).Value = "ID" sheet(3, 1).Value = 12 sheet(3, 2).Value = 17 sheet.Rows(3).OutlineLevel = 2 sheet.Rows(3).Visible = False sheet(4, 1).Value = 12 sheet(4, 2).Value = 14 sheet.Rows(4).OutlineLevel = 2 sheet.Rows(4).Visible = False

sheet(5, 1).Value = "12 Total" sheet(5, 1).Style = totalStyle sheet(5, 2).Value = 31 sheet(5, 2).Formula = "SUBTOTAL(9,C4:C5)" sheet.Rows(5).OutlineLevel = 1 sheet(6, 1).Value = 34 sheet(6, 2).Value = 109 sheet.Rows(6).OutlineLevel = 2 sheet(7, 1).Value = "34 Total" sheet(7, 1).Style = totalStyle sheet(7, 2).Value = 109 sheet(7, 2).Formula = "SUBTOTAL(9,C7:C7)" sheet.Rows(7).OutlineLevel = 1 sheet(8, 1).Value = "Grand Total" sheet(8, 1).Style = totalStyle sheet(8, 2).Value = 140 sheet(8, 2).Formula = "SUBTOTAL(9,C4:C7)" sheet.Rows(8).OutlineLevel = 0 book.Save("c:\mybook.xls") System.Diagnostics.Process.Start("C:\mybook.xls")
End Sub
C#

C#

private void Form1_Load(object sender, EventArgs e) {
C1XLBook book = new C1XLBook();
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4a7ef9a1-e1ba-49ca-9551-f272b540e51c"><ac:plain-text-body><![CDATA[ XLSheet sheet = book.Sheets[0]; XLStyle totalStyle = new XLStyle(book); totalStyle.Font = new Font(book.DefaultFont, FontStyle.Bold); sheet[2, 1].Value = "Number"; sheet[2, 2].Value = "ID"; sheet[3, 1].Value = 12; sheet[3, 2].Value = 17; sheet.Rows[3].OutlineLevel = 2; sheet.Rows[3].Visible = false; sheet[4, 1].Value = 12; sheet[4, 2].Value = 14; sheet.Rows[4].OutlineLevel = 2; sheet.Rows[4].Visible = false; sheet[5, 1].Value = "12 Total"; sheet[5, 1].Style = totalStyle; sheet[5, 2].Value = 31; sheet[5, 2].Formula = "SUBTOTAL(9,C4:C5)"; sheet.Rows[5].OutlineLevel = 1; sheet[6, 1].Value = 34; sheet[6, 2].Value = 109; sheet.Rows[6].OutlineLevel = 2; sheet[7, 1].Value = "34 Total"; sheet[7, 1].Style = totalStyle;

]]></ac:plain-text-body></ac:structured-macro>


sheet[7, 2].Value = 109; sheet[7, 2].Formula = "SUBTOTAL(9,C7:C7)"; sheet.Rows[7].OutlineLevel = 1; sheet[8, 1].Value = "Grand Total"; sheet[8, 1].Style = totalStyle; sheet[8, 2].Value = 140; sheet[8, 2].Formula = "SUBTOTAL(9,C4:C7)"; sheet.Rows[8].OutlineLevel = 0; book.Save(@"c:\mybook.xls"); System.Diagnostics.Process.Start(@"C:\mybook.xls");
}
4. 运行程序,就会打开一个电子表格,样子如下图:

SUBTOTAL 公式可以获得指定行的合计值。


保存和加载CSV文件

ComponentOneExcelfor.NET 支持保存和加载用逗号分隔值(CSV)文件。 CSV是一种存储表格数据的通常文件,表格数据包括数字和文本,它是一种纯文本的形式具有可读性。下面的代码提供了如何保存和加载CSV文件的示例。

  1. 双击工具盒中的C1XLBook组件将它添加到你的窗体上。
  2. 选择View|Code并且在你的窗体上添加下面的语句:

ImportC1.C1Excel(VisualBasic) usingC1.C1Excel;(C#)

  1. 在Form_Load事件中添加下面的代码来创建一个带有10个值的表格并且以.csv的格式保存工作簿:

Visual Basic

Visual Basic

Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim sheet As XLSheet = c1XLBook1.Sheets(0) For i As Integer = 0 To 9 sheet(i, 0).Value = i + 1 sheet(i, 1).Value = 10 – i; Next
sheet.SaveCsv("c:\test.csv") System.Diagnostics.Process.Start("C:\test.csv")
End Sub

C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="00c9ae34-0a50-4a0d-90dc-6e1f2d94c122"><ac:plain-text-body><![CDATA[

private void Form1_Load(object sender, EventArgs e) { XLSheet sheet = c1XLBook1.Sheets[0]; for (int i = 0; i <= 9; i++) { sheet[i, 0].Value = i + 1; sheet[i, 1].Value = 10 - i; }
]]></ac:plain-text-body></ac:structured-macro>
sheet.SaveCsv(@"c:\test.csv"); System.Diagnostics.Process.Start(@"C:\test.csv");

}

  1. 按下F5运行程序,就能看到csv文件如图

  1. 给test.csv文件添加一些新的值。为了将新的值保存到文件中你还需要再次保存文件。在Form1_Load事件中给

LoadCsv和SaveCsv方法添加下面的代码就能做到了,代码如下
Visual Basic

Visual Basic

Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim sheet As XLSheet = c1XLBook1.Sheets(0) For i As Integer = 0 To 9 sheet(i, 0).Value = i + 1 sheet(i, 1).Value = 10 – 1 Next sheet.SaveCsv("c:\test.csv") sheet.LoadCsv("c:\test.csv") For i As Integer = 10 To 19 sheet(i, 0).Value = i + 1 sheet(i, 1).Value = 10 -1 Next
sheet.SaveCsv("c:\test.csv")
System.Diagnostics.Process.Start("C:\test.csv")

End Sub
C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="d36f08d2-dbb8-4900-82a7-4d372042cf1b"><ac:plain-text-body><![CDATA[

private void Form1_Load(object sender, EventArgs e) { XLSheet sheet = c1XLBook1.Sheets[0]; for (int i = 0; i <= 9; i+) { sheet[i, 0].Value = i + 1; sheet[i, 1].Value = 10 – i; } sheet.SaveCsv(@"c:\test.csv"); sheet.LoadCsv(@"c:\test.csv"); for (int i = 10; i <= 19; i+) { sheet[i, 0].Value = i + 1; sheet[i, 1].Value = 20 – i; }
]]></ac:plain-text-body></ac:structured-macro>
sheet.SaveCsv(@"c:\test.csv"); System.Diagnostics.Process.Start(@"C:\test.csv");
}

  1. 按下F5运行程序,就能看到csv文件如图

  • 无标签