在没有安装Office的情况下在.net中创buildexcel文件

我需要在未安装Microsoft Office的生产服务器(Windows Server 2008)上使用.net创buildexcel文件(使用多个工作表)。 这可以在VS2010和Windows Server 2008的帮助下完成吗?还是有办法通过使用office webapps来实现这一点。

我使用专门用于此目的的OpenXML SDK。 它不允许您真正在服务器环境中计算和运行函数,但是它非常适合创build和操作工作簿。

下载:

http://www.microsoft.com/downloads/en/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en

文档:

http://msdn.microsoft.com/en-us/library/bb448854.aspx

你可以使用这个库: http : //epplus.codeplex.com/releases/view/42439

它跳过使用Excel二进制文件,而使用Excel XML格式,因此编写了Excel可以正确理解和正确呈现的简单明了的文本。

如果目标是办公室2007年或2010年,你可以试试这个免费的图书馆http://epplus.codeplex.com/

如果目标<=到2003年,您可以尝试使用GemBox.Spreadsheet

免费版本限于:每张纸的最大行数是150.每个工作簿的最大张数是5。

使用官方的Microsoft OpenXML SDK。

尝试这个:

Sub exportExcel(ByVal grdView As DataGridView, ByVal fileName As String, _ ByVal fileExtension As String, ByVal filePath As String) ' Choose the path, name, and extension for the Excel file Dim myFile As String = filePath & "\" & fileName & fileExtension ' Open the file and write the headers Dim fs As New IO.StreamWriter(myFile, False) Try fs.WriteLine("<?xml version=""1.0""?>") fs.WriteLine("<?mso-application progid=""Excel.Sheet""?>") fs.WriteLine("<ss:Workbook xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">") ' Create the styles for the worksheet fs.WriteLine(" <ss:Styles>") ' Style for the column headers fs.WriteLine(" <ss:Style ss:ID=""1"">") fs.WriteLine(" <ss:Font ss:Bold=""1""/>") fs.WriteLine(" <ss:Alignment ss:Horizontal=""Center"" ss:Vertical=""Center"" " & _ "ss:WrapText=""1""/>") fs.WriteLine(" <ss:Interior ss:Color=""#C0C0C0"" ss:Pattern=""Solid""/>") fs.WriteLine(" </ss:Style>") ' Styles for the column information fs.WriteLine(" <ss:Style ss:ID=""2"">") fs.WriteLine(" <ss:Alignment ss:Vertical=""Center"" ss:WrapText=""1""/>") fs.WriteLine(" </ss:Style>") fs.WriteLine(" </ss:Styles>") ' Write the worksheet contents fs.WriteLine("<ss:Worksheet ss:Name=""EasyWorks"">") fs.WriteLine(" <ss:Table>") For i As Integer = 0 To grdView.Columns.Count - 1 fs.WriteLine(String.Format(" <ss:Column ss:Width=""{0}""/>", _ grdView.Columns.Item(i).Width)) Next fs.WriteLine(" <ss:Row>") For i As Integer = 0 To grdView.Columns.Count - 1 If grdView.Columns(i).Visible Then fs.WriteLine(String.Format(" <ss:Cell ss:StyleID=""1"">" & _ "<ss:Data ss:Type=""String"">{0}</ss:Data></ss:Cell>", _ grdView.Columns.Item(i).HeaderText)) End If Next fs.WriteLine(" </ss:Row>") ' Check for an empty row at the end due to Adding allowed on the DataGridView Dim subtractBy As Integer, cellText As String If grdView.AllowUserToAddRows = True Then subtractBy = 2 Else subtractBy = 1 ' Write contents for each cell For i As Integer = 0 To grdView.RowCount - subtractBy If grdView.Rows(i).Visible Then fs.WriteLine(String.Format(" <ss:Row ss:Height=""{0}"">", _ grdView.Rows(i).Height)) For intCol As Integer = 0 To grdView.Columns.Count - 1 If grdView.Columns(intCol).Visible Then cellText = grdView.Item(intCol, i).Value.ToString ' Check for null cell and change it to empty to avoid error If cellText = vbNullString Then cellText = "" fs.WriteLine(String.Format(" <ss:Cell ss:StyleID=""2"">" & _ "<ss:Data ss:Type=""String"">{0}</ss:Data></ss:Cell>", _ cellText.ToString)) End If Next fs.WriteLine(" </ss:Row>") End If Next ' Close up the document fs.WriteLine(" </ss:Table>") fs.WriteLine("</ss:Worksheet>") fs.WriteLine("</ss:Workbook>") fs.Close() Catch ex As Exception MessageBox.Show(ex.Message, "ERROR: ", MessageBoxButtons.OK, MessageBoxIcon.Error) Err.Clear() Finally myFile = Nothing fs = Nothing End Try End Sub