Click here to Skip to main content
15,903,523 members
Articles / Programming Languages / C#
Article

Export a DataSet to Microsoft Excel without the use of COM objects

Rate me:
Please Sign up or sign in to vote.
3.84/5 (84 votes)
28 May 20051 min read 665.1K   120   158
A simple function that writes a DataSet to a Microsoft Excel document.

Introduction

This function takes in a DataSet and file name and writes the DataSet to an Excel worksheet. The code is pretty straightforward. Great thing about this function is that, it's technically an XML file that is saved as an XLS file. So it can be used as either file format. No more leading zero truncation on numbers that look like strings. Example, if you made a tab delimited file and put a field such as "00036" (a field that looks like a number but should be regarded as a string), MS Excel would truncate the leading zeros... This problem is solved with this method.

Here is the code:

C#
public static void exportToExcel(DataSet source, string fileName)

{

    System.IO.StreamWriter excelDoc;

    excelDoc = new System.IO.StreamWriter(fileName);
    const string startExcelXML = "<xml version>\r\n<Workbook " + 
          "xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" + 
          " xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " + 
          "xmlns:x=\"urn:schemas-    microsoft-com:office:" + 
          "excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" + 
          "office:spreadsheet\">\r\n <Styles>\r\n " + 
          "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " + 
          "<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" + 
          "\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" + 
          "\r\n <Protection/>\r\n </Style>\r\n " + 
          "<Style ss:ID=\"BoldColumn\">\r\n <Font " + 
          "x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " + 
          "<Style     ss:ID=\"StringLiteral\">\r\n <NumberFormat" + 
          " ss:Format=\"@\"/>\r\n </Style>\r\n <Style " + 
          "ss:ID=\"Decimal\">\r\n <NumberFormat " + 
          "ss:Format=\"0.0000\"/>\r\n </Style>\r\n " + 
          "<Style ss:ID=\"Integer\">\r\n <NumberFormat " + 
          "ss:Format=\"0\"/>\r\n </Style>\r\n <Style " + 
          "ss:ID=\"DateLiteral\">\r\n <NumberFormat " + 
          "ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " + 
          "</Styles>\r\n ";
     const string endExcelXML = "</Workbook>";

     int rowCount = 0;
     int sheetCount = 1;
     /*
    <xml version>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
    <Styles>
    <Style ss:ID="Default" ss:Name="Normal">
      <Alignment ss:Vertical="Bottom"/>
      <Borders/>
      <Font/>
      <Interior/>
      <NumberFormat/>
      <Protection/>
    </Style>
    <Style ss:ID="BoldColumn">
      <Font x:Family="Swiss" ss:Bold="1"/>
    </Style>
    <Style ss:ID="StringLiteral">
      <NumberFormat ss:Format="@"/>
    </Style>
    <Style ss:ID="Decimal">
      <NumberFormat ss:Format="0.0000"/>
    </Style>
    <Style ss:ID="Integer">
      <NumberFormat ss:Format="0"/>
    </Style>
    <Style ss:ID="DateLiteral">
      <NumberFormat ss:Format="mm/dd/yyyy;@"/>
    </Style>
    </Styles>
    <Worksheet ss:Name="Sheet1">
    </Worksheet>
    </Workbook>
    */
    excelDoc.Write(startExcelXML);
    excelDoc.Write("<Worksheet ss:Name=\"Sheet" + sheetCount + "\">");
    excelDoc.Write("<Table>");
    excelDoc.Write("<Row>");
    for(int x = 0; x < source.Tables[0].Columns.Count; x++)
    {
      excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">");
      excelDoc.Write(source.Tables[0].Columns[x].ColumnName);
      excelDoc.Write("</Data></Cell>");
    }
    excelDoc.Write("</Row>");
    foreach(DataRow x in source.Tables[0].Rows)
    {
      rowCount++;
      //if the number of rows is > 64000 create a new page to continue output
      if(rowCount==64000) 
      {
        rowCount = 0;
        sheetCount++;
        excelDoc.Write("</Table>");
        excelDoc.Write(" </Worksheet>");
        excelDoc.Write("<Worksheet ss:Name=\"Sheet" + sheetCount + "\">");
        excelDoc.Write("<Table>");
      }
      excelDoc.Write("<Row>"); //ID=" + rowCount + "
      for(int y = 0; y < source.Tables[0].Columns.Count; y++)
      {
        System.Type rowType;
        rowType = x[y].GetType();
        switch(rowType.ToString())
        {
          case "System.String":
             string XMLstring = x[y].ToString();
             XMLstring = XMLstring.Trim();
             XMLstring = XMLstring.Replace("&","&");
             XMLstring = XMLstring.Replace(">",">");
             XMLstring = XMLstring.Replace("<","<");
             excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
                            "<Data ss:Type=\"String\">");
             excelDoc.Write(XMLstring);
             excelDoc.Write("</Data></Cell>");
             break;
           case "System.DateTime":
             //Excel has a specific Date Format of YYYY-MM-DD followed by  
             //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000
             //The Following Code puts the date stored in XMLDate 
             //to the format above
             DateTime XMLDate = (DateTime)x[y];
             string XMLDatetoString = ""; //Excel Converted Date
             XMLDatetoString = XMLDate.Year.ToString() +
                  "-" + 
                  (XMLDate.Month < 10 ? "0" + 
                  XMLDate.Month.ToString() : XMLDate.Month.ToString()) +
                  "-" +
                  (XMLDate.Day < 10 ? "0" + 
                  XMLDate.Day.ToString() : XMLDate.Day.ToString()) +
                  "T" +
                  (XMLDate.Hour < 10 ? "0" + 
                  XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) +
                  ":" +
                  (XMLDate.Minute < 10 ? "0" + 
                  XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) +
                  ":" +
                  (XMLDate.Second < 10 ? "0" + 
                  XMLDate.Second.ToString() : XMLDate.Second.ToString()) + 
                  ".000";
                excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" + 
                             "<Data ss:Type=\"DateTime\">");
                excelDoc.Write(XMLDatetoString);
                excelDoc.Write("</Data></Cell>");
                break;
              case "System.Boolean":
                excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
                            "<Data ss:Type=\"String\">");
                excelDoc.Write(x[y].ToString());
                excelDoc.Write("</Data></Cell>");
                break;
              case "System.Int16":
              case "System.Int32":
              case "System.Int64":
              case "System.Byte":
                excelDoc.Write("<Cell ss:StyleID=\"Integer\">" + 
                        "<Data ss:Type=\"Number\">");
                excelDoc.Write(x[y].ToString());
                excelDoc.Write("</Data></Cell>");
                break;
              case "System.Decimal":
              case "System.Double":
                excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" + 
                      "<Data ss:Type=\"Number\">");
                excelDoc.Write(x[y].ToString());
                excelDoc.Write("</Data></Cell>");
                break;
              case "System.DBNull":
                excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
                      "<Data ss:Type=\"String\">");
                excelDoc.Write("");
                excelDoc.Write("</Data></Cell>");
                break;
              default:
                throw(new Exception(rowType.ToString() + " not handled."));
            }
          }
          excelDoc.Write("</Row>");
        }
        excelDoc.Write("</Table>");
        excelDoc.Write(" </Worksheet>");
        excelDoc.Write(endExcelXML);
        excelDoc.Close();
    }

Note

To see what generated, just pass the file name with a .txt extension. For Excel format, the file name will be .xls. For XML format, the file name will be .xml.

The Export Routine does have one side effect! (if anyone can figure out a solution to this, it would be greatly appreciated). The file is saved as an .XLS file, but it technically is still an XML file. This little nuance makes the file size larger then it really should be. A quick fix to this is to just do File Save As.... after the file has been exported. When you do the Save As in Excel, it will reconstruct it as a "real" Excel file, and it will bring the file size down to what it should be.

Feed Back is always welcome.

Simple as that...Enjoy.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralRe: I was unable to make it works :( [modified] Pin
raoul_benneth21-Sep-06 1:12
raoul_benneth21-Sep-06 1:12 
GeneralLess or Equal Pin
ola.sundling30-Aug-06 7:05
ola.sundling30-Aug-06 7:05 
GeneralRe: Less or Equal Pin
Xodiak30-Aug-06 7:11
Xodiak30-Aug-06 7:11 
GeneralStrict Parse error in VB.NET version of this code Pin
marcusts10-Aug-06 22:23
marcusts10-Aug-06 22:23 
GeneralRe: Strict Parse error in VB.NET version of this code Pin
Xodiak16-Aug-06 5:49
Xodiak16-Aug-06 5:49 
GeneralRe: Strict Parse error in VB.NET version of this code Pin
caladan21-Aug-06 23:14
caladan21-Aug-06 23:14 
GeneralRe: Strict Parse error in VB.NET version of this code Pin
amitkurane5-Feb-07 20:51
amitkurane5-Feb-07 20:51 
GeneralRe: Strict Parse error in VB.NET version of this code Pin
Craig K2-Oct-09 9:09
professionalCraig K2-Oct-09 9:09 
The VB.Net version accidentally ommitted some key data. :o (colon followed by a 'o') is actually a smiley face on this site. Here is an explanation..

This is the first part of what the output from the xml/xls file should look like:
<br />
<?xml version="1.0"?><br />
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"<br />
xmlns:o="urn:schemas-microsoft-com:office:office"<br />
xmlns:x="urn:schemas-microsoft-com:office:excel"<br />
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"><br />


but the code was putting out:

<br />
<xml version><br />
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"<br />
xmlns="urn:schemas-microsoft-com:office:office"<br />
xmlns:x="urn:schemas-microsoft-com:office:excel"<br />
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"><br />


The second xmls was missing the :o after it and there are some version issues that might cause Parse problems with some versions of Excel

Here is a working copy that avoids the Strict Parse problem:
'Create the StreamWriter to the specified file.
           Dim excelDoc As New StreamWriter(FileName)

           'Create the Workbood Header.
           Const startExcelXML As String = "<?xml version='1.0'?>" + vbCrLf + _
           "<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""" + vbCrLf + _
           "xmlns:o=""urn:schemas-microsoft-com:office:office""" + vbCrLf + _
           "xmlns:x=""urn:schemas-microsoft-com:office:excel""" + vbCrLf + _
           "xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">" + vbCrLf + _
           "<Styles>" + vbCrLf + _
           "<Style ss:ID=""Default"" ss:Name=""Normal"">" + vbCrLf + _
           "<Alignment ss:Vertical=""Bottom""/>" + vbCrLf + _
           "<Borders/>" + vbCrLf + _
           "<Font/>" + vbCrLf + _
           "<Interior/>" + vbCrLf + _
           "<NumberFormat/>" + vbCrLf + _
           "<Protection/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "<Style ss:ID=""BoldColumn"">" + vbCrLf + _
           "<Font x:Family=""Swiss"" ss:Bold=""1""/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "<Style ss:ID=""StringLiteral"">" + vbCrLf + _
           "<NumberFormat ss:Format=""@""/>" + vbCrLf + _
           "<Alignment ss:Vertical=""Bottom"" ss:WrapText=""1""/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "<Style ss:ID=""Decimal"">" + vbCrLf + _
           "<NumberFormat ss:Format=""0.0000""/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "<Style ss:ID=""Integer"">" + vbCrLf + _
           "<NumberFormat ss:Format=""0""/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "<Style ss:ID=""DateLiteral"">" + vbCrLf + _
           "<NumberFormat ss:Format=""mm/dd/yyyy;@""/>" + vbCrLf + _
           "</Style>" + vbCrLf + _
           "</Styles>" + vbCrLf

           'Const startExcelXML As String = "<xml version>" & vbCr & vbLf & "<Workbook " & "xmlns=""urn:schemas-microsoft-com:office:spreadsheet""" & vbCr & vbLf & " xmlns=""urn:schemas-microsoft-com:office:office""" & vbCr & vbLf & " " & "xmlns:x=""urn:schemas- microsoft-com:office:" & "excel""" & vbCr & vbLf & " xmlns:ss=""urn:schemas-microsoft-com:" & "office:spreadsheet"">" & vbCr & vbLf & " <Styles>" & vbCr & vbLf & " " & "<Style ss:ID=""Default"" ss:Name=""Normal"">" & vbCr & vbLf & " " & "<Alignment ss:Vertical=""Bottom""/>" & vbCr & vbLf & " <Borders/>" & vbCr & vbLf & " <Font/>" & vbCr & vbLf & " <Interior/>" & vbCr & vbLf & " <NumberFormat/>" & vbCr & vbLf & " <Protection/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""BoldColumn"">" & vbCr & vbLf & " <Font " & "x:Family=""Swiss"" ss:Bold=""1""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""StringLiteral"">" & vbCr & vbLf & " <NumberFormat" & " ss:Format=""@""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " <Style " & "ss:ID=""Decimal"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""0.0000""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""Integer"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""0""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " <Style " & "ss:ID=""DateLiteral"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""mm/dd/yyyy;@""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "</Styles>" & vbCr & vbLf & " "
           'Const endExcelXML As String = "</Workbook>"





           'Create the workbook footer
           Const endExcelXML As String = "</Workbook>"

           Dim rowCount As Integer = 0
           Dim SheetCount As Integer = 1

           'Begin Workbook Output.
           excelDoc.Write(startExcelXML)
           excelDoc.Write("<Worksheet ss:Name=""Sheet" + SheetCount.ToString + """>")
           excelDoc.Write("<Table>" + vbCrLf)

           'Set the column widths
           For Each Column As DataGridViewColumn In DataGridView.Columns
               If Column.Visible = True Then
                   excelDoc.Write("<Column ss:Width=""" + Column.Width.ToString + """/>")
               End If
           Next

           excelDoc.Write("<Row>" + vbCrLf)
           'Write the column Headers.

           For Each column As DataGridViewColumn In DataGridView.Columns
               If column.Visible = True Then
                   excelDoc.Write("<Cell ss:StyleID=""BoldColumn""><Data ss:Type=""String"">")
                   excelDoc.Write(column.HeaderText)
                   excelDoc.Write("</Data></Cell>" + vbCrLf)
               End If
           Next
           excelDoc.Write("</Row>" + vbCrLf)

           'Export the DataGrid Row Data.
           For Each Row As DataGridViewRow In DataGridView.Rows
               rowCount += 1
               If rowCount > 64000 Then
                   rowCount = 0
                   SheetCount += 1
                   excelDoc.Write("</Table>")
                   excelDoc.Write("</WorkSheet>")
                   excelDoc.Write("<Worksheet ss:Name=""Sheet""" + SheetCount.ToString + ">")
               End If

               excelDoc.Write("<Row>")
               For Each cell As DataGridViewCell In Row.Cells
                   If cell.Visible = True Then
                       Select Case cell.ValueType.Name
                           Case "String"
                               Dim XMLString As String = cell.FormattedValue.ToString
                               XMLString = XMLString.Trim
                               XMLString = XMLString.Replace("&", "&amp;")
                               XMLString = XMLString.Replace(">", "&gt;")
                               XMLString = XMLString.Replace("<", "&lt;")
                               excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                               excelDoc.Write(XMLString)
                               excelDoc.Write("</Data></Cell>")
                           Case "DateTime"
                               Dim XMLDate As DateTime
                               Dim xmlDateString As String = ""
                               If Not IsDBNull(cell.Value) Then
                                   XMLDate = CType(cell.Value, Date)
                                   xmlDateString = XMLDate.Year.ToString
                                   xmlDateString += "-"
                                   xmlDateString += CType(IIf(XMLDate.Month < 10, "0" & XMLDate.Month.ToString, XMLDate.Month.ToString), String)
                                   xmlDateString += "-"
                                   xmlDateString += CType(IIf(XMLDate.Day < 10, "0" & XMLDate.Day.ToString, XMLDate.Day.ToString), String)
                                   xmlDateString += "T"
                                   xmlDateString += CType(IIf(XMLDate.Hour < 10, "0" & XMLDate.Hour.ToString, XMLDate.Hour.ToString), String)
                                   xmlDateString += ":"
                                   xmlDateString += CType(IIf(XMLDate.Minute < 10, "0" & XMLDate.Minute.ToString, XMLDate.Minute.ToString), String)
                                   xmlDateString += ":"
                                   xmlDateString += CType(IIf(XMLDate.Second < 10, "0" & XMLDate.Second.ToString, XMLDate.Second.ToString), String)
                                   xmlDateString += ".000"
                                   excelDoc.Write("<Cell ss:StyleID=""DateLiteral""><Data ss:Type=""DateTime"">")
                                   excelDoc.Write(xmlDateString)
                                   excelDoc.Write("</Data></Cell>")
                               Else
                                   excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                                   excelDoc.Write("")
                                   excelDoc.Write("</Data></Cell>")
                               End If
                           Case "Boolean"
                               excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""Number"">")
                               excelDoc.Write(cell.FormattedValue.ToString)
                               excelDoc.Write("</Data></Cell>")
                           Case "Integer", "Int16", "Int32", "Int64"
                               If cell.OwningColumn.CellType.Name = "DataGridViewComboBoxCell" Then
                                   Dim XMLString As String = cell.FormattedValue.ToString
                                   XMLString = XMLString.Trim
                                   XMLString = XMLString.Replace("&", "&amp")
                                   XMLString = XMLString.Replace(">", "&gt")
                                   XMLString = XMLString.Replace("<", "&lt")
                                   excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                                   excelDoc.Write(XMLString)
                                   excelDoc.Write("</Data></Cell>")
                               ElseIf cell.OwningColumn.CellType.Name = "DataGridViewCheckBoxCell" Then
                                   Dim ValueString As String = Nothing
                                   Select Case cell.Value.ToString
                                       Case "0"
                                           ValueString = "False"
                                       Case "1"
                                           ValueString = "True"
                                       Case Else
                                           ValueString = "Unknown"
                                   End Select
                                   excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                                   excelDoc.Write(ValueString)
                                   excelDoc.Write("</Data></Cell>")
                               Else
                                   excelDoc.Write("<Cell ss:StyleID=""Integer""><Data ss:Type=""Number"">")
                                   excelDoc.Write(cell.Value)
                                   excelDoc.Write("</Data></Cell>")
                               End If
                           Case "Decimal", "Double", "Single"
                               excelDoc.Write("<Cell ss:StyleID=""Decimal""><Data ss:Type=""Number"">")
                               excelDoc.Write(cell.Value)
                               excelDoc.Write("</Data></Cell>")
                           Case "Byte"
                               Dim ValueString As String = Nothing
                               Select Case cell.Value.ToString
                                   Case "0"
                                       ValueString = "False"
                                   Case "1"
                                       ValueString = "True"
                                   Case Else
                                       ValueString = "Unknown"
                               End Select
                               excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                               excelDoc.Write(ValueString)
                               excelDoc.Write("</Data></Cell>")
                           Case "CheckState"
                               Dim ValueString As String = Nothing
                               Select Case cell.Value.ToString
                                   Case "0"
                                       ValueString = "False"
                                   Case "1"
                                       ValueString = "True"
                                   Case Else
                                       ValueString = "Unknown"
                               End Select
                               excelDoc.Write("<Cell ss:StyleID=""StringLiteral""><Data ss:Type=""String"">")
                               excelDoc.Write(ValueString)
                               excelDoc.Write("</Data></Cell>")
                           Case "DBNull"
                               excelDoc.Write("<Cell ss:StyleID=""StringLiteral""></Data ss:Type=""String"">")
                               excelDoc.Write("")
                               excelDoc.Write("</Data></Cell>")
                           Case Else
                               Throw New Exception(cell.ValueType.ToString + ": Not Handled")
                       End Select
                       excelDoc.Write(vbCrLf)
                   End If
               Next
               excelDoc.Write("</Row>" + vbCrLf)
           Next

           'Close out the workBook.
           excelDoc.Write("</Table>" + vbCrLf)
           excelDoc.Write(" </Worksheet>" + vbCrLf)
           excelDoc.Write(endExcelXML)
           excelDoc.Close()


Hipe this helps anyone using the VB version posted here
GeneralRe: Strict Parse error in VB.NET version of this code Pin
Black_Trouble27-Feb-13 22:27
Black_Trouble27-Feb-13 22:27 
GeneralConverting above code in VB.NET Pin
info_rameshcg3-Jul-06 23:13
info_rameshcg3-Jul-06 23:13 
GeneralRe: Converting above code in VB.NET Pin
Xodiak4-Jul-06 4:27
Xodiak4-Jul-06 4:27 
GeneralRe: Converting above code in VB.NET Pin
marcusts10-Aug-06 22:45
marcusts10-Aug-06 22:45 
GeneralApplying style to cell Pin
kingrr29-Jun-06 4:25
kingrr29-Jun-06 4:25 
GeneralRe: Applying style to cell [modified] Pin
Xodiak29-Jun-06 6:43
Xodiak29-Jun-06 6:43 
GeneralHelp in Data > 64000 rows Pin
arsalanayub16-May-06 11:15
arsalanayub16-May-06 11:15 
GeneralRe: Help in Data > 64000 rows Pin
oobject1-Sep-06 1:50
oobject1-Sep-06 1:50 
QuestionOpens as XML document not as Excel Pin
vikkyzkool9-May-06 2:47
vikkyzkool9-May-06 2:47 
AnswerRe: Opens as XML document not as Excel Pin
Xodiak9-May-06 4:23
Xodiak9-May-06 4:23 
QuestionRe: Opens as XML document not as Excel Pin
vikkyzkool9-May-06 6:30
vikkyzkool9-May-06 6:30 
QuestionRe: Opens as XML document not as Excel Pin
unRheal1-Dec-06 8:10
unRheal1-Dec-06 8:10 
GeneralFormattin Problem Pin
TuneFish4-Mar-06 5:06
TuneFish4-Mar-06 5:06 
GeneralRe: Formattin Problem Pin
Xodiak4-Mar-06 11:50
Xodiak4-Mar-06 11:50 
GeneralWriting the binary excel file instead of xml [modified] Pin
sanjeevofbcs2-Feb-06 21:39
sanjeevofbcs2-Feb-06 21:39 
QuestionRe: Writing the binary excel file instead of xml Pin
vikkyzkool9-May-06 2:40
vikkyzkool9-May-06 2:40 
AnswerRe: Writing the binary excel file instead of xml Pin
sanjeevofbcs9-May-06 19:38
sanjeevofbcs9-May-06 19:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.