2010-12-31 5 views
4

Ich benötige Excel-Dateien (mit mehreren Blättern) mit .net auf einem Produktionsserver (Windows Server 2008), wo Microsoft Office nicht installiert ist. Kann dies mit Hilfe von VS2010 und Windows Server 2008 erfüllt werden. oder gibt es eine Möglichkeit, dies mit Office-Webapps zu erreichen.Erstellen Excel-Datei in .net ohne Office installiert

+2

Mögliche Duplikat http://stackoverflow.com/questions/151005/ create-excel-xls-und-xlsx-file-from-c –

+0

Warum die Down-Abstimmung? Neuer Benutzer ... – jgauffin

+0

Die Antworten zu http://stackoverflow.com/questions/151005 erwähnt viele Bibliotheken, die erreichen, wonach Sie suchen. Ihr Problem ist wirklich ein Problem der Wahl. – Codo

Antwort

0

können Sie diese Bibliothek verwenden: http://epplus.codeplex.com/releases/view/42439

Es überspringt die Verwendung von Excel-Binärdateien, sich für das Excel XML-Format, also einfacher, einfacher Text zu schreiben, die Excel richtig und machen verstehen.

0

Wenn das Ziel Office 2007 oder 2010 ist, können Sie mit dieser kostenlosen Bibliothek versuchen http://epplus.codeplex.com/

Wenn das Ziel < ist = bis 2003 können Sie versuchen, mit GemBox.Spreadsheet

Die kostenlosen Version ist beschränkt auf: Maximale Anzahl der Zeilen pro Blatt ist 150. Maximale Anzahl der Blätter pro Arbeitsmappe ist 5.

+0

Ich habe EPPlus ausprobiert. Ich erhalte nur eine NullReferenceException in der Bibliothek, wenn versucht wird, die Excel-Dateien zu lesen, mit denen ich arbeite. –

0

Verwenden Sie das offizielle Microsoft Open XML SDK.

4

Ich verwende das OpenXML SDK, das für diesen Zweck vorgesehen ist. Es erlaubt Ihnen nicht, Funktionen in einer Serverumgebung tatsächlich zu berechnen und auszuführen, aber es ist sehr gut zum Erstellen und Bearbeiten von Arbeitsmappen.

Download:

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

Dokumentation:

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

+0

Wenn Sie Produkte/Bibliotheken/irgendetwas referenzieren, fügen Sie bitte Links hinzu. –

+0

Finden Sie nicht, dass OpenXML extrem schwierig zu benutzen ist? Nur etwas Einfaches zu tun, wie einen Hyperlink hinzuzufügen, erfordert viel Code. – David

0

Versuchen Sie folgendes:

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 
Verwandte Themen