我需要在未安装Microsoft Office的生产服务器(Windows Server 2008)上使用.net创建excel文件(具有多个工作表)。 这可以在VS2010和Windows Server 2008的帮助下实现。或者有任何方法可以通过使用office webapps来实现这一点。

#1楼 票数: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

#2楼 票数: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

#3楼 票数:0

您可以使用此库: http//epplus.codeplex.com/releases/view/42439

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

#4楼 票数:0

如果目标是office 2007或2010,您可以尝试使用此免费库http://epplus.codeplex.com/

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

免费版本限制为:每张表的最大行数为150.每个工作簿的最大页数为5。

#5楼 票数:0

使用官方Microsoft OpenXML SDK。

  ask by Pravin translate from so

未解决问题?本站智能推荐:

2回复

在没有安装Office Beeing的情况下读取excel文件

有没有一种方法可以读取.NET中的excel(2003)文件,而无需安装Office beeing甚至可能没有任何第三方库? 为了能够使用VSTO,我想需要安装Office,对吗? 但是ADO.NET(例如Microsoft.Jet.OLEDB.4.0,Extended Proper
1回复

在Windows应用程序中没有MS Office的情况下Excel导入失败

我有一个运行在Visual Studio上的.net Windows应用程序,其中我要上传一个Excel工作表并处理一些数据。 我刚买了一个全新的笔记本,上面只安装了MS Word (编辑:MS Word和MS Excel)查看器(尚未安装MS Office)。 当我尝试上载Excel工作表
2回复

使用Linq to XML,XMLNS,XDeclaration,单元格格式(工作)创建Office Excel文档

我需要在C#和Linq中将这个XML复制到XML。 除了正常的.NET之外,我不希望任何依赖于其他库。 XML如下所示。 问题:我无法弄清楚如何打印这两行: 完整的XML文档: 码:
2回复

在asp.net中读取上载的.xls Excel文件时出错

我编写了一个程序,从数据库中读取记录集,然后将其保存在datagrid中。 从这里,我使用户将文件下载为excel文件。 现在,用户对文件进行更改,然后再次上载,然后从此处读取上载的.xls文件,并在数据库中进行必要的更改。 问题是,每当用户上传更新的excel文件时,我都无法访问
2回复

是否有使用Office模板的.Net报告工具?

在我当前正在处理的应用程序上,我们需要一种方法让用户生成Microsoft Word或Excel格式的报告(导出和打印)。 要求之一是用户将使用Word或Excel模板文档创建报告模板。 我试图用Google搜索一种使用Word和excel模板作为报告模板的报告工具,而我发现的唯一工
2回复

使用DSOFile.OleDocumentPropertiesClass获取Office(excel)文档的页数问题

我正在使用DSOFile.OleDocumentPropertiesClass来获取没有自动化的Office文档的页数。 这对于docx和pptx文件工作正常,但对于xlsx文件始终返回0。
1回复

.net MS Excel互操作加载项

使用c#开发了一个Excel加载项。 我要对该Excel加载项进行一些身份验证。 我们正在使用cognito进行身份验证。 因此,在我的Excel功能区中,我添加了一个按钮,该按钮应在单击时打开浏览器选项卡并进行oauth身份验证,并且在收到令牌后,我需要在Excel c#中使用该令牌
5回复

如何使用c#从excel文件中读取数据[重复]

这个问题在这里已经有了答案: 从 C# 读取 Excel 文件(32 个回答) 8 年前关闭。 我的应用程序需