关于.NET:如何在不安装MS Office的情况下在C中创建Excel(.xls和.xlsx)文件?

How to create Excel (.XLS and .XLSX) file in C# without installing Ms Office?

如何在不要求在运行代码的计算机上安装Excel的情况下使用C创建Excel电子表格?


您可以使用一个名为ExcelLibrary的库。这是一个发布在谷歌代码上的免费开放源代码库:

Excel库

这看起来是您上面提到的PHP ExcelWriter的一个端口。它还不会写入新的.xlsx格式,但他们正在努力在中添加该功能。

它非常简单,体积小,使用方便。另外,它还有一个数据集管理器,允许您使用数据集和数据表轻松处理Excel数据。

Excellibrary似乎只适用于较旧的Excel格式(.xls文件),但将来可能会增加对较新2007/2010格式的支持。

您还可以使用epplus,它仅适用于Excel2007/2010格式文件(.xlsx文件)。还有NPOI,两者都可以工作。

正如注释中所指出的,每个库中都有一些已知的错误。总之,随着时间的推移,epplus似乎是最佳选择。它似乎也得到了更积极的更新和记录。

另外,如下面的@aрт诳мЦарионов所述,epplus支持数据透视表,Excellibrary可能会提供一些支持(Excellibrary中的数据透视表问题)

以下是几个快速参考链接:
Excellibrary-GNU较小的GPL
epplus-GNU较小的通用公共许可证(lgpl)
NPOI-Apache许可证

下面是Excellibrary的一些示例代码:

下面是一个从数据库中获取数据并从中创建工作簿的示例。请注意,Excellibrary代码是底部的单行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql ="SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

创建Excel文件就这么简单。您也可以手动创建Excel文件,但上面的功能让我印象深刻。


如果您对XLSX格式满意,请尝试mycodeplexgithub project。EPPLUS。从ExcelPackage的源代码开始,但今天它完全重写了。支持范围、单元格样式、图表、形状、图片、名称范围、自动筛选和许多其他内容。


我成功地使用了以下开源项目:

  • ExcelPackage for OOXML格式(Office 2007)

  • .xls格式的NPOI(Office 2003)。NPOI 2.0(beta)也支持XLSX。

看看我的博客:

在C中创建Excel电子表格.xls和.xlsx#

带Excel表和动态图表的NPOI


对于Microsoft Office,使用开放式XML SDK 2.0怎么样?

一些好处:

  • 不需要安装Office
  • made by microsoft=体面的msdn文档
  • 只在项目中使用一个.NET dll
  • SDK附带了许多工具,如diff、validator等

链接:

  • 下载SDK
  • 主要MSDN着陆
  • "如何……"起始页
  • blogs.msdn brian_jones发布SDK
  • blogs.msdn brian_jones描述了在不崩溃的情况下处理大型文件的sdk(与dom方法不同)


可以使用OLEDB创建和操作Excel文件。检查:使用OLEDB读写Excel。

典型示例:

1
2
3
4
5
6
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

编辑-更多链接:

  • 嘿,编剧!在不使用Excel的情况下,如何从Excel中读取数据?
  • 如何使用ADO.NET在带有Visual Basic.NET的Excel工作簿中检索和修改记录
  • 使用ADO.NET C DBProviderFactory读取和写入Excel电子表格


商业解决方案,spreadsheetgear for.net将做到这一点。

您可以在此处看到实时ASP.NET(C和VB)示例,并在此处下载评估版本。

免责声明:我拥有SpreadsheetGear LLC


我使用的几个选项:

如果XLSX是必须的:ExcelPackage是一个好的开始,但当开发人员停止使用它时,它就消失了。exml从中得到并添加了一些特性。ExML不是一个糟糕的选择,我还在一些生产网站上使用它。

但是,对于我所有的新项目,我都在使用NPOI,ApachePOI的.NET端口。NPOI 2.0(alpha)也支持XLSX。


一个非常轻量级的选项可能是使用HTML表。只需在文件中创建head、body和table标记,并将其保存为扩展名为.xls的文件。有一些特定于Microsoft的属性可用于设置输出样式,包括公式。

我知道您可能没有在Web应用程序中对此进行编码,但这里有一个通过HTML表组合Excel文件的示例。如果您正在编写控制台应用程序、桌面应用程序或服务,则可以使用此技术。


您可以使用ExcelXmlWriter。

它很好用。


实际上,您可能想要签出互操作类。你说没有OLE(这不是),但是interop类非常容易使用。

如果你没试过的话,你可能会印象深刻。

请注意微软对此的立场:

Microsoft does not currently recommend, and does not support,
Automation of Microsoft Office applications from any unattended,
non-interactive client application or component (including ASP,
ASP.NET, DCOM, and NT Services), because Office may exhibit unstable
behavior and/or deadlock when Office is run in this environment.


如果要创建Excel2007/2010文件,请尝试此开源项目:https://github.com/closedxml/closedxml

It provides an object oriented way to manipulate the files (similar to
VBA) without dealing with the hassles of XML Documents. It can be used
by any .NET language like C# and Visual Basic (VB).

ClosedXML allows you to create Excel 2007/2010 files without the Excel
application. The typical example is creating Excel reports on a web
server:

1
2
3
4
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value ="Hello World!";
workbook.SaveAs("HelloWorld.xlsx");


这里有一个完全免费的C库,它允许您使用OpenXML库从DataSetDataTableList<>导出到真正的Excel2007.xlsx文件中:

http://mikesknowledgebase.com/pages/csharp/exporttoexcel.htm网站

提供完整的源代码(免费)以及说明和演示应用程序。

将此类添加到应用程序后,只需一行代码即可将数据集导出到Excel:

1
CreateExcelFile.CreateExcelDocument(myDataSet,"C:\\Sample.xlsx");

不会比这简单得多…

它甚至不需要Excel出现在您的服务器上。


您可以考虑使用XML电子表格2003格式创建文件。这是一个简单的XML格式,使用了一个有良好文档记录的模式。


SyncFusion Essential XLSIO可以做到这一点。它不依赖于Microsoft Office,并且对不同的平台有特定的支持。

  • ASP.NET
  • ASP.NET MVC
  • 超宽带
  • 沙马林
  • WPF和Windows窗体
  • Windows服务和基于批处理的操作

代码示例:

1
2
3
4
5
6
7
8
9
10
//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

如果您符合条件(收入少于100万美元),整个控制套件可通过社区许可计划免费提供。注意:我为SyncFusion工作。


您可能想看看gembox.spreadsheet。

他们有一个所有功能的免费版本,但如果您需要的话,每工作表限制为150行,每工作表限制为5页。

我还没必要自己使用它,但看起来确实很有趣。


好,

您还可以使用第三方库,如aspose。

这个库的好处是它不需要在您的计算机上安装Excel,这在您的情况下是理想的。


OpenXML也是一种很好的替代方法,有助于避免在服务器上安装MS Excel。由Microsoft提供的OpenXML SDK 2.0简化了操作打开的XML包以及包中底层的打开XML架构元素的任务。开放式XML应用程序编程接口(API)封装了开发人员在开放式XML包上执行的许多常见任务。

查看openxml:有助于避免在服务器上安装MS Excel的替代方案


我同意生成XML电子表格,下面是一个关于如何为C 3生成XML电子表格的示例(每个人都在vb 9:p中对此进行了博客)http://www.aron-powell.com/linq-to-xml-to-excel


各种各样的Office2003 XML库对于较小的Excel文件都可以很好地工作。但是,我发现以XML格式保存的大型工作簿的绝对大小是一个问题。例如,我使用的一个工作簿在新的(当然也更紧凑)XLSX格式中是40MB,它变成了一个360MB XML文件。

就我的研究而言,有两个商业软件包允许输出到旧的二进制文件格式。他们是:

  • 杰马克
  • 组件式Excel

两者都不便宜(我想分别是500美元和800美元)。但这两者都独立于Excel本身。

我想知道的是OpenOffice.org之类的Excel输出模块。我想知道它们是否可以从Java移植到.NET。


只想添加对直接解决您问题的第三方解决方案的另一个引用:http://www.officewriter.com

(免责声明:我为软工匠工作,这家公司是一家制造写字楼的公司)


您可以使用此库创建格式良好的Excel文件:http://officehelper.codeplex.com/documentation/文档见以下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName ="Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range"header"; use the command"insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range"sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name","value","comment
<hr>
<p>
Some 3rd party component vendors like Infragistics or Syncfusion provide very good Excel export capabilities that do not require Microsoft Excel to be installed.
</p>

<p>
Since these vendors also provide advanced UI grid components, these components are particularly handy if you want the style and layout of an excel export to mimic the current state of a grid in the user interface of your application.
</p>

<p>
If your export is intended to be executed server side with emphasis on the data to be exported and with no link to the UI, then I would go for one of the free open source options (e.g. ExcelLibrary).
</p>

<p>
I have previously been involved with projects that attempted to use server side automation on the Microsoft Office suite. Based on this experience I would strongly recommend against that approach.
</p>

<hr><P>IKVM+POI</P><P>或者,您可以使用互操作…</P><hr><P>下面是使用Linq to XML完成此操作的一种方法,包括示例代码:</P><P>使用LINQ快速导入和导出Excel数据到XML</P><P>这有点复杂,因为您必须导入名称空间等等,但它确实让您避免了任何外部依赖。</P><P>(当然,它是vb.net,而不是c,但您可以始终在自己的项目中隔离vb.net内容以使用XML文本,并在c中执行其他操作。)</P><p><center>[wp_ad_camp_3]</center></p><hr>
[cc lang="
csharp"]public class GridViewExportUtil
{
    public static void Export(string fileName, GridView gv)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
           "
content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType ="
application/ms-excel";

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                //  Create a form to contain the grid
                Table table = new Table();

                //  add the header row to the table
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                    table.Rows.Add(gv.HeaderRow);
                }

                //  add each of the data rows to the table
                foreach (GridViewRow row in gv.Rows)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }

                //  add the footer row to the table
                if (gv.FooterRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                    table.Rows.Add(gv.FooterRow);
                }

                //  render the table into the htmlwriter
                table.RenderControl(htw);

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

    /// <summary>
    /// Replace any of the contained controls with literals
    /// </summary>
    /// <param name="
control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ?"
True" :"False"));
            }

            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }
}

嗨,这个解决方案是将网格视图导出到Excel文件,它可能会帮助您


我最近刚用了flexcel.net,发现它是一个优秀的图书馆!我不是说太多的软件产品。在这里介绍整个销售过程毫无意义,你可以阅读他们网站上的所有功能。

它是一种商业产品,但如果你买了它,你就能得到完整的货源。所以如果你真的想的话,我想你可以把它编译成你的程序集。否则,它只是Xcopy的一个额外的组件—没有配置或安装或类似的东西。

我认为,如果没有第三方库(如.NET框架),您将找不到任何方法来实现这一点,显然,它没有内置的对它的支持,而OLE自动化只是一个痛苦的世界。


我编写了一个简单的代码,通过使用system.io.streamwriter将数据集导出到Excel,而不使用Excel对象。

下面的代码将从数据集中读取所有表,并将它们逐个写入工作表。我从这篇文章中得到了帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
public static void exportToExcel(DataSet source, string fileName)
{
        const string endExcelXML ="</Workbook>";
        const string startExcelXML ="<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>

"
;
        System.IO.StreamWriter excelDoc = null;
        excelDoc = new System.IO.StreamWriter(fileName);

        int sheetCount = 1;
        excelDoc.Write(startExcelXML);
        foreach (DataTable table in source.Tables)
        {
            int rowCount = 0;
            excelDoc.Write("<Worksheet ss:Name="" + table.TableName +"">");
            excelDoc.Write("<Table>");
            excelDoc.Write("<Row>");
            for (int x = 0; x < table.Columns.Count; x++)
            {
                excelDoc.Write("<Cell ss:StyleID="BoldColumn"><Data ss:Type="String">");
                excelDoc.Write(table.Columns[x].ColumnName);
                excelDoc.Write("</Data></Cell>");
            }
            excelDoc.Write("</Row>");
            foreach (DataRow x in table.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="" + table.TableName +"">");
                    excelDoc.Write("<Table>");
                }
                excelDoc.Write("<Row>"); //ID=" + rowCount +"
                for (int y = 0; y < table.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>");
            sheetCount++;
        }


        excelDoc.Write(endExcelXML);
        excelDoc.Close();
    }


从C创建Excel文件的最简单和最快速的方法是使用开放式XML生产力工具。开放式XML生产力工具与开放式XML SDK安装一起提供。该工具将任何Excel文件反向工程为C代码。然后可以使用C代码重新生成该文件。

所涉及的流程概述如下:

  • 使用该工具安装开放式XML SDK。
  • 使用具有所需外观的最新Excel客户端创建Excel文件。把它命名为DesiredLook.xlsx
  • 使用工具打开DesiredLook.xlsx并单击顶部附近的"反射代码"按钮。enter image description here
  • 文件的C代码将在工具的右窗格中生成。将它添加到您的C解决方案中,并生成具有所需外观的文件。
  • 作为奖励,此方法适用于任何Word和PowerPoint文件。作为C开发人员,您将根据需要对代码进行更改。

    我在GitHub上开发了一个简单的WPF应用程序,它将在Windows上运行。有一个名为GeneratedClass的占位符类,您可以在其中粘贴生成的代码。如果返回文件的一个版本,它将生成如下Excel文件:

    enter image description here


    在C_中,您可以通过以下链接找到一些有用的Excel自动化。

    网址:http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

    麦克伯顿。


    Look at samples how to create Excel files.

    There are examples in C# and VB.NET

    It manages XSL XSLX and CSV Excel files.

    http://www.devtriogroup.com/ExcelJetcell/Samples


    你试过西尔克吗?

    我们以前在经典的ASP中生成Excelsheets作为Sylk,现在我们也在搜索Excelgenerater。

    Sylk的优点是,您可以格式化单元格。


    Java开源解决方案是Apache POI。也许这里有一种方法来设置互操作,但是我不太了解Java来回答这个问题。

    当我研究这个问题时,我最终使用了互操作程序集。


    寻找极端。它是一个非常酷的库,使您能够使用OpenXML格式生成OpenXML文件。

    它也是一个开源项目。

    http://www.extrememl.com/


    我也投票支持gembox.spreadsheet。

    非常快速和易于使用,在他们的网站上有大量的例子。

    以全新的执行速度完成了我的报告任务。


    http://www.codeproject.com/KB/cs/Excel_and_C_.aspx <= why not just use the built in power of windows, just install office on the server, any application that you install can be automated.

    So much easier just use the native methods.

    If it installed you can use it, this is the most awesome and under used feature in windows it was Dubbed COM back in the good old days, and it saves you tons of time and pain.

    Or even easier just use the ref lib MS supplies - http://csharp.net-informations.com/excel/csharp-create-excel.htm


    您只需使用Excel XML格式将其写出为XML,并以.xls扩展名命名,它将用Excel打开。您可以控制XML文件标题中的所有格式(粗体、宽度等)。

    有一个来自维基百科的XML示例。


    一个非常容易被忽视的选择是使用Microsoft Reporting创建一个.rdlc报告并将其导出到Excel格式。您可以在Visual Studio中进行设计,并使用以下方法生成文件:

    1
    localReport.Render("EXCELOPENXML", null, ((name, ext, encoding, mimeType, willSeek) => stream = new FileStream(name, FileMode.CreateNew)), out warnings);

    您还可以分别使用"WORDOPENXML""PDF"导出do.doc或.pdf,它在许多不同的平台(如asp.net和ssrs)上得到支持。

    在可视化设计器中进行更改要容易得多,您可以在其中看到结果,相信我,一旦您开始对数据分组、格式化组头、添加新的节,就不想再处理几十个XML节点。


    如果从代码中生成数据表或DataGridView,则可以使用此简单方法保存所有数据。不建议使用此方法,但它的工作状态为100%,即使您没有在计算机中安装MS Excel。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    try
     {
      SaveFileDialog saveFileDialog1 = new SaveFileDialog();
      saveFileDialog1.Filter ="Excel Documents (*.xls)|*.xls";
      saveFileDialog1.FileName ="Employee Details.xls";
      if (saveFileDialog1.ShowDialog() == DialogResult.OK)
      {
      string fname = saveFileDialog1.FileName;
      StreamWriter wr = new StreamWriter(fname);
      for (int i = 0; i <DataTable.Columns.Count; i++)
      {
      wr.Write(DataTable.Columns[i].ToString().ToUpper() +"\t");
      }
      wr.WriteLine();

      //write rows to excel file
      for (int i = 0; i < (DataTable.Rows.Count); i++)
      {
      for (int j = 0; j < DataTable.Columns.Count; j++)
      {
      if (DataTable.Rows[i][j] != null)
      {
      wr.Write(Convert.ToString(getallData.Rows[i][j]) +"\t");
      }
       else
       {
       wr.Write("\t");
       }
       }
       //go to next line
       wr.WriteLine();
       }
       //close file
       wr.Close();
       }
       }
       catch (Exception)
       {
        MessageBox.Show("Error Create Excel Sheet!");
       }

    不久前,我在NPOI上创建了一个DLL。它的使用非常简单:

    1
    2
    3
    4
    5
    IList<DummyPerson> dummyPeople = new List<DummyPerson>();
    //Add data to dummyPeople...
    IExportEngine engine = new ExcelExportEngine();
    engine.AddData(dummyPeople);
    MemoryStream memory = engine.Export();

    你可以在这里了解更多。

    顺便说一下,是100%开源的。可以随意使用、编辑和共享;)


    为了将XLS保存为XLSX格式,我们只需要从Microsoft.Office.Interop.Excel库调用SaveAs方法。此方法将获取大约16个参数,其中一个参数也是文件格式。

    Microsoft文档:此处另存为方法参数

    我们需要传递的对象是

    1
    2
    3
    wb.SaveAs(filename, 51, System.Reflection.Missing.Value,
    System.Reflection.Missing.Value, false, false, 1,1, true,
    System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value)

    这里,51是XLSX的枚举值

    对于不同文件格式的另存为,您可以参考xlfileformat


    签出此项不需要第三方库,您可以使用此项将数据表数据简单地导出到Excel文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    var dt ="your code for getting data into datatable";
                Response.ClearContent();
                Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xls", DateTime.Now.ToString("yyyy-MM-dd")));
                Response.ContentType ="application/vnd.ms-excel";
                string tab ="";
                foreach (DataColumn dataColumn in dt.Columns)
                {
                    Response.Write(tab + dataColumn.ColumnName);
                    tab ="\t";
                }
                Response.Write("
    "
    );
                int i;
                foreach (DataRow dataRow in dt.Rows)
                {
                    tab ="";
                    for (i = 0; i < dt.Columns.Count; i++)
                    {
                        Response.Write(tab + dataRow[i].ToString());
                        tab ="\t";
                    }
                    Response.Write("
    "
    );
                }
                Response.End();


    我正在使用以下代码创建Excel2007文件,该文件创建文件并写入该文件,但当我打开该文件时,会出现以下错误:Exel无法打开文件bcz文件可能已被压缩或文件扩展名不兼容。但是如果我用.xls来归档,那就要罚款了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int i = 0; i < TotalFile; i++)
    {
        Contact.Clear();
        if (innerloop == SplitSize)
        {
            for (int j = 0; j < SplitSize; j++)
            {
                string strContact = DSt.Tables[0].Rows[i * SplitSize + j][0].ToString();
                Contact.Add(strContact);
            }
            string strExcel = strFileName +"_" + i.ToString() +".xlsx";
                             File.WriteAllLines(strExcel, Contact.ToArray());
        }
    }

    也指链接

    http://dotnet-magic.blogspot.in/2011/10/createformat-excel-file-from-cnet.html