我需要在未安装Microsoft Office的生产服务器(Windows Server 2008)上使用.net创建excel文件(包含多个工作表)。 这可以在VS2010和Windows Server 2008的帮助下实现。 或者有没有办法通过使用办公室webapps实现这一目标。
答案 0 :(得分:4)
我使用专门用于此目的的OpenXML SDK。它不允许您在服务器环境中实际计算和运行函数,但它非常适合创建和操作工作簿。
下载:
文档:
答案 1 :(得分:0)
您可以使用此库:http://epplus.codeplex.com/releases/view/42439
它跳过使用Excel二进制文件,支持Excel XML格式,因此编写了Excel可以理解和正确呈现的简单文本。
答案 2 :(得分:0)
如果目标是Office 2007或2010,您可以尝试使用此免费库http://epplus.codeplex.com/
如果目标是< =到2003,您可以尝试使用GemBox.Spreadsheet
免费版仅限于: 每张纸的最大行数为150。 每个工作簿的最大工作表数为5。
答案 3 :(得分:0)
使用官方Microsoft OpenXML SDK。
答案 4 :(得分:0)
试试这个:
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