在没有安装办公室的.net中创建excel文件

时间:2010-12-31 13:07:22

标签: .net excel ms-office

我需要在未安装Microsoft Office的生产服务器(Windows Server 2008)上使用.net创建excel文件(包含多个工作表)。 这可以在VS2010和Windows Server 2008的帮助下实现。 或者有没有办法通过使用办公室webapps实现这一目标。

5 个答案:

答案 0 :(得分:4)

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

下载:

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

答案 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