MS Office-i yükləmədən C # -də Excel faylını (.XLS və .XLSX) necə yaratmaq olar?

C # kodunu istifadə edərək, bir Excel elektron tablo yaratmaq üçün necə Excel ilə kompüter yüklemek tələb olunur?

1667
30 сент. 30 dəq . 2008-09-30 01:30 '08 saat 01:30 'da 2008-09-30 01:30
@ 42 cavab
  • 1
  • 2

ExcelLibrary adlı bir kitabxana istifadə edə bilərsiniz. Bu, Google Kodunda yerləşdirilən pulsuz açıq mənbə kitabxanadır:

ExcelLibrary

Yuxarıda göstərdiyiniz PHP ExcelWriter portuna bənzəyir. Henüz yeni .xlsx formatına yazmayacaq, lakin bu funksiyanı əlavə etmək üçün çalışırlar.

Çox sadə, kiçik və istifadə üçün asandır. Əlavə olaraq, DataSetHelper, Excel Data ilə asanlıqla işləmək üçün DataSets və DataTables istifadə etməyə imkan verir.

ExcelLibrary hələ də köhnə Excel formatı (.xls faylları) üçün işləyir, lakin gələcəkdə yeni 2007/2010 formatları üçün dəstək əlavə edə bilər.

Yalnız Excel 2007/2010 faylları (.xlsx faylları) üçün çalışan EPPlus istifadə edə bilərsiniz. Hər ikisi ilə də işləyən NPOI də var.

Şərhdə qeyd edildiyi kimi hər bir kitabxana ilə bir neçə tanınmış hatalar var. Ümumiyyətlə, EPPlus zamanla ən yaxşı seçimdir. Göründüyü kimi, bu, daha da fəal şəkildə yenilənir və sənədləşdirilir.

Bundan əlavə, aşağıda Artem Tsarionov qeyd etdiyi kimi, EPPlus pivot masalar üçün dəstək var və ExcelLibrary bəzi dəstək ola bilər ( ExcelLibrary pivot masalar problemi )

Tez istinad üçün bəzi linklər:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Kiçik Ümumi İctimai Lisenziya (LGPL)
NKOI - Apache Lisansı

ExcelLibrary üçün nümunə kodu aşağıdakılardır:

Verilənlər bazasından verilən məlumatların alınması və ondan iş kitabının yaradılması nümunəsi. ExcelLibrary kodunun aşağıdakı bir xətt olduğuna diqqət yetirin:

 //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 the easy part. Create the Excel worksheet from the data set ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds); 

Bir Excel faylı yaratmaq çox asandır. Əl ilə də Excel faylları yarada, lakin yuxarıda göstərilən funksiyalar məni heyran etdi.

930
09 апр. Apr 09-da Mike Webb tərəfindən verilmiş cavab 2010-04-09 00:36 '10 at 0:36 2010-04-09 00:36

Xlsx formatından xoşunuzsa , codeplex GitHub layihəsini sınayın. EPPlus . Mən bunu ExcelPackage mənbəsindən başlatdım, amma bu gün yenidən yazılır. Çaprazları, hüceyrə üslublarını, diaqramlarını, şəkillərini, şəkillərini, nişanlarını, autofilterləri və bir çox başqa şeyi dəstəkləyir.

border=0
523
29 марта '10 в 15:25 2010-03-29 15:25 29 Mart 'da 15:25 'Jan Källman'a cavab verdi 2010-03-29 15:25

Aşağıdakı açıq mənbə layihələrini uğurla istifadə etdim:

  • OOXML formatları üçün ExcelPackage (Office 2007)

  • .Xls formatı üçün NPOI (Office 2003). NPOI 2.0 (Alpha) da XLSX-ni dəstəkləyir.

Blog yazılarımın bir göz atın:

Excel elektron tablolarının yaradılması XLS və XLSX in C #

Excel elektron tablo və dinamik chart ilə NPOI

156
20 июня '09 в 23:48 2009-06-20 23:48 Cavab Leniel Maccaferri tərəfindən 20 İyun 2013 tarixində 23:48 2009-06-20 23:48 tarixində verilir

Microsoft Office üçün Open XML SDK 2.0 istifadə etməliyəm?

Bir çox faydalar:

  • Office quraşdırma tələb olunmur
  • Microsoft tərəfindən = layiqli MSDN sənədləri
  • Bir layihədə istifadə üçün yalnız bir. NET dll
  • SDK diff, validator və s. Kimi bir çox vasitələrlə gəlir.

Referanslar:

152
16 авг. Cavab Pellared 16 aug verilir . 2011-08-16 12:25 '11 'da 12:25' də 2011-08-16 12:25

Excel faylları yaratmaq və işləmək üçün OLEDB istifadə edə bilərsiniz. Bunu yoxlayın: OLEDB istifadə edərək Excel oxuyun və yaz .

Tipik nümunə:

 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(); } 

EDIT - Bəzi keçidlər:

99
30 сент. Cavab Panos 30 Sentyabr verilir. 2008-09-30 01:41 '08 at 01:41 2008-09-30 01:41

Ticarət həlli, SpreadsheetGear üçün. NET bunu edəcək.

Burada ASP.NET canlı nümunələrini (C # və VB) görə bilərsiniz və sınaq versiyasını buradan yükləyə bilərsiniz .

Disclaimer: Mən SpreadsheetGear LLC-ə sahibim

76
24 янв. Cavab 24 yanvar Joe Erickson tərəfindən verilir 2009-01-24 21:33 '09 da 21:33 'de 2009-01-24 21:33

Mən istifadə etdiyim bir neçə variant:

XLSX zəruri olduqda : ExcelPackage yaxşı bir başlanğıcdır, lakin geliştirici bu işi dayandırdıqda öldü. ExML orada qalxıb bir neçə funksiyanı əlavə etdi. ExML pis bir seçim deyil, mən hələ də bir neçə saytdan istifadə edirəm.

Ancaq, bütün yeni layihələr üçün NPOI , .NET Apache POI limanından istifadə edirəm. NPOI 2.0 (Alpha) da XLSX-ni dəstəkləyir.

61
01 июня '09 в 18:45 2009-06-01 18:45 Cavab Nate 01 iyun '09 saat 18: 45-da verilir. 2009-06-01 18:45

Çox yüngül bir seçim HTML masaları istifadə etmək ola bilər. Yalnız bir faylda baş, bədən və masa etiketləri yaradın və .xls uzantısı ilə bir fayl olaraq saxlaya bilərsiniz. Düsturlar daxil olmaqla, çıxış yaratmaq üçün istifadə edə biləcəyiniz xüsusi Microsoft xüsusiyyətləri vardır.

Anlayıram ki, bunu bir web tətbiqində kodlaya bilmirsiniz, ancaq bir HTML faylının bir Excel faylı kompozisiyasının nümunəsi . Bu metod bir konsol proqramı, masaüstü proqramı və ya xidmətini kodlaşdırdıqda istifadə edilə bilər.

58
30 сент. Cavab Unutulan Sütyen tərəfindən 30 sentyabrda verilir . 2008-09-30 01:37 '08 saat 01:37 'da 2008-09-30 01:37

ExcelXmlWriter istifadə edə bilərsiniz.

Yaxşı işləyir.

45
12 февр. cavab 12 fevralda Petr Snobelt tərəfindən verilir. 2009-02-12 18:04 '09 at 18:04 'da 2009-02-12 18:04

Həqiqətən qarşılıqlı dərsləri yoxlaya bilərsiniz. OLE deyirsiniz (bu vəziyyət deyil), lakin qarşılıqlı dərslərdən istifadə etmək çox asandır.

Əgər siz onları sınamış olsanız, heyran olursunuz.

Microsoftun bu məsələ ilə bağlı mövqeyindən xəbərdar olun:

Microsoft, Microsoft Office proqramlarının avtomatlaşdırılmasını hər hansı bir fəaliyyətsiz, interaktiv olmayan müştəri proqramından və ya komponentdən (ASP, ASP.NET, DCOM və NT Services daxil olmaqla) tövsiyə etmir və ya ofisə qeyri-sabit davranış göstərə bilər və / və ya Office bu mühitdə başlamışdır.

42
30 сент. cavab GEOCHET 30 sep verilir . 2008-09-30 01:34 '08 saat 01:34 'da 2008-09-30 01:34

Excel 2007/2010 faylları yaratsanız, bu açıq mənbə layihəsini cəhd edin: https://github.com/closedxml/closedxml

XML sənədlərinin problemləri ilə məşğul olmadan, faylları (VBA-a oxşar) manipulyasiya etmək üçün obyekt yönümlü bir yol təqdim edir. C # və Visual Basic (VB) kimi hər hansı bir .NET dilində istifadə edilə bilər.

ClosedXML, Excel olmadan Excel 2007/2010 faylları yaratmağa imkan verir. Tipik bir nümunə bir web serverdə Excel hesabatlarını yaradır:

 var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx"); 
41
23 нояб. Cavab 23 noyabr tarixində Manuel tərəfindən verilir. 2010-11-23 19:33 '10 at 19:33 2010-11-23 19:33

Bir DataSet , DataTable və ya List<> bir orijinal Excel.xlsx Excel 2007 faylına ixrac etməyə imkan verən tamamilə pulsuz bir C # kitabxanasıdır. OpenXML kitabxanalarının istifadə edilməsi:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Tam mənbə kodu verilir - təlimat və demo tətbiqi ilə birlikdə.

Bu sinifə ərizə əlavə etdikdən sonra DataSet-i Excel-a yalnız bir kod satırı ilə ixrac edə bilərsiniz:

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

Bu daha asan deyil ...

Və hətta sizin serverinizdə Excel tələb etmir.

30
05 дек. Mike Gledhill tərəfindən verilmiş cavab 05 dekabr 2011-12-05 15:08 '11 at 15:08 'da 2011-12-05 15:08

XML Spreadsheet 2003 formatını istifadə edərək , öz fayllarınızı yaratmağı düşünə bilərsiniz. Bu yaxşı sənədləşdirilmiş sxemdən istifadə edərək sadə bir XML formatıdır.

23
30 сент. Cavab Sam Warwick tərəfindən verilmişdir 30 sentyabr 2008-09-30 04:16 '08 at 04:16 2008-09-30 04:16

Syncfusion Essential XlsIO bunu edə bilər. Bu Microsoft ofisindən asılı deyil və müxtəlif platformalar üçün bəzi dəstəkləri də var.

Kod nümunəsi:

 //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); 

Əgər gəlir əldə etmək hüququ qazansa (1 milyon ABŞ dollarından az) icma lisenziyalaşdırma proqramı vasitəsilə bütün idarəetmə vasitələrinin dəsti pulsuz təmin olunur. Qeyd Sinxfüzyonda çalışıram.

19
07 окт. Cavab Danis Jebaraj Oct 07 2016-10-07 21:03 '16 at 21:03 2016-10-07 21:03

GemBox.Spreadsheet səhifəsinə baxa bilərsiniz.

Bütün xüsusiyyətləri ilə pulsuz versiyasına malikdirlər, ancaq bu, hər kağızda 150 xətt və kitabın 5 səhifəsi ilə məhdudlaşır.

Mən hələ istifadə etmək lazım deyil, lakin maraqlıdır.

17
30 сент. Cavab ManiacZX 30 Sentyabr verilir. 2008-09-30 01:48 '08 at 1:48 2008-09-30 01:48

Bəli,

Üçüncü tərəf kitabxanasını da istifadə edə bilərsiniz, məsələn Aspose .

Bu kitabxana, Excel sizin kompüterinizə yüklənməyəcəyini, sizin vəziyyətinizdə ideal olacaqdır.

14
10 нояб. Cavab Dimi Takis tərəfindən 10 noyabrda verilir 2009-11-10 08:05 '09 saat 08:05 'da 2009-11-10 08:05

OpenXML həmçinin serverdə MS Excel-in qurulmasından çəkinməyə kömək edən yaxşı bir alternativdir. Microsoft'un Open XML SDK 2.0 Open XML paketlərini və açıq XML şemasının əsas elementlərini paketdə idarə etmək vəzifəsini asanlaşdırır. Açıq XML Proqram Proqramlaşdırma İnterfeysi (API), developers Open XML paketlərində çıxış edən bir çox ümumi tapşırıqları əhatə edir.

Tick OpenXML: Alternativ olaraq, serverdə MS Excel-in qurulmasını önləməyə kömək edir

14
02 дек. Cavab Sachin Dhir tərəfindən verilir 02 Dekabr. 2015-12-02 16:30 '15, saat 16:30 'da, 2015-12-02 16:30

Yalnız birbaşa probleminizi həll edən üçüncü tərəfin bir həll yolunu əlavə etmək istəyirik: http://www.officewriter.com

(Disclaimer: SoftArtisans, OfficeWriter edən şirkət üçün çalışıram)

13
23 авг. Cavab Eisbaer 23 avqustda verilir. 2011-08-23 19:52 '11 at 19:52 2011-08-23 19:52

Kiçik excel faylları üçün müxtəlif Office 2003 kitabxana kitabxanaları mövcuddur. Ancaq, XML formatında saxlanan böyük bir kitabın ölçüsü problem olduğuna inanıram. Məsələn, işləyən iş dəftəri yeni (və şübhəsiz daha sıx dolu) XLSX formatında 40 MB olacaq, 360 MB həcmli fayl olacaq.

Mənim tədqiqatımda olduğu kimi, köhnə ikili fayl formatlarını göstərməyə imkan verən iki ticarət paket var. Bunlar:

Ucuz deyil (500USD və 800USD, məncə). lakin hər ikisi də Excel-dən müstəqil olaraq çalışır.

Mənim maraqlandığım şey OpenOffice.org saytının sevdiyi üçün Excel çıxış moduludur. Java-dan Java-a keçə bilərsinizmi?

13
24 нояб. Cavab verilir biozinc 24 noyabr. 2008-11-24 11:22 '08 at 11:22 2008-11-24 11:22

XML cədvəllərinin yaradılmasına razıyam, burada C # 3-də bunu necə etmək lazım olduğuna dair bir nümunə (VB 9: P-də bu barədə yalnız bloglar) http://www.aaron-powell.com/linq-to-xml-to -excel

13
30 сент. Aaron Powell tərəfindən verilmiş cavab 30 sentyabr 2008-09-30 06:53 '08 saat 06:53 'da 2008-09-30 06:53

İKVM + POI

Və ya Interop istifadə edə ...

11
30 сент. Cavab MagicKat tərəfindən verilir Sep 30 2008-09-30 01:39 '08 at 1:39 2008-09-30 01:39

Infragistics və ya Syncfusion kimi bəzi üçüncü tərəf komponent təchizatçıları Microsoft Excel quraşdırma tələb etməyən çox yaxşı Excel ixrac imkanları təmin edir.

Bu provayderlər həmçinin inkişaf etmiş UI mesh komponentləri təmin etdiyinə görə, bu komponentlər, excelin stilini və düzeni tətbiqinizin UI-də şəbəkənin hazırkı vəziyyətini simulyasiya etmək istəməsi üçün xüsusilə faydalıdır.

İhracatınız ixrac edilən məlumatlara və istifadəçi interfeysi ilə əlaqə olmadan server tərəfində yerinə yetirilmək üçün nəzərdə tutulsa, mən açıq mənbə olan açıq seçimlərdən birini (məsələn ExcelLibrary) istifadə edə bilərəm.

Daha əvvəl Microsoft Office-də server tərəfli avtomatlaşdırma istifadə etməyə çalışmış layihələrə qatıldım. Bu təcrübəyə əsaslanaraq, mən belə bir yanaşmaya qarşı şiddətli bir tövsiyə verəcəyəm.

11
16 февр. Cavab Simen S verildi 16 fevral. 2011-02-16 14:47 '11 'da 14:47' da 2011-02-16 14:47

Mən yaxınlarda FlexCel.NET istifadə etmişəm və əla kitabxananı tapdım! Çox proqram məhsullarından danışmıram. Burada bütün satış həcmlərini göstərmək lazım deyil, veb saytınızdakı bütün xüsusiyyətləri oxuya bilərsiniz.

Bu ticarət məhsuldur, ancaq satın alsanız, tam mənbəni əldə edirsiniz. Buna görə də, isterseniz, onu qurmaq üçün tərtib edə biləcəyinizə inanıram. Əks halda, xcopy üçün yalnız bir əlavə quruluşdur - heç bir konfiqurasiya və quraşdırma və ya belə bir şey yoxdur.

Hesab edirəm ki, bu, üçüncü tərəf kitabxanaları olmadan bunu etmək üçün heç bir yol tapa bilməzsiniz. Çünki .NET çərçivəsi açıq-aydın dəstək vermir və OLE Automation yalnız bir ağrıdır.

11
15 февр. Cavab ƏMİP 15 fevralda verilir. 2009-02-15 11:12 '09 at 11:12 'da 2009-02-15 11:12
 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); } } } } 

Salam, həll sizə kömək edə biləcək Excel faylına grid görünüşünü ixrac etməkdir

11
28 апр. Gaurav tərəfindən verilmiş cavab 28 aprel 2011-04-28 13:40 '11 saat 13:40 'da 2011-04-28 13:40

Bu kitabxana ilə gözəl formatlanmış Excel faylları yarada bilərsiniz: http://officehelper.codeplex.com/documentation
Aşağıdakı misal:

 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"}); helper.InsertRange(sample1, getSample()); //you could use here other named ranges to insert new cells and call InsertRange as many times you want, //it will be copied one after another; //even you can change direction or the current cell/sheet before you insert //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it helper.DeleteSheet("Sheet3"); } 

burada nümunə aşağıdakılardır:

 private IEnumerable<List<object>> getSample() { var random = new Random(); for (int loop = 0; loop < 3000; loop++) { yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop}; } } 
11
03 дек. İstifadəçi tərəfindən verilmiş cavab 05 dekabr. 2010-12-03 22:53 '10 at 10:53 AM 2010-12-03 22:53

Burada LINQ ilə XML-i nümunə kodu ilə tamamlaya bilərsiniz:

LINQ istifadə edərək, Excel məlumatlarını sürətli idxal və ixrac etmək

Bu bir az çətindir, çünki, ad boşluqlarını və s. İdxal etməliyik, lakin bu, hər hansı bir xarici asılılığı qarşısını almaq üçün imkan verir.

(Əlbəttə ki, bu, C # deyil, VB.NET deyil, lakin VB.NET materialını XML layihələrində istifadə etmək və hər şeyi C # -də etmək üçün öz layihənizdə izah edə bilərsiniz.)

11
30 сент. Ryan Lundy tərəfindən verilmiş cavab 30 sentyabr 2008-09-30 04:39 '08 at 4:39 2008-09-30 04:39

C # -də bəzi faydalı Excel otomasyonu aşağıdakı linkdə tapa bilərsiniz.

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

Bolton.

9
10 нояб. istifadəçi tərəfindən verilmiş cavab cəmi 10 noyabr 2009-11-10 08:02 '09 saat 08:02 'da 2009-11-10 08:02

System.IO.StreamWriter istifadə edərək excel obyektini istifadə etmədən excel üçün məlumat setini ixrac etmək üçün sadə kod yazdım.

Aşağıdakı məlumatlar bütün masaları oxumaq və onları bir-birinə yazmaq olan kodu. Bu məqalədən yardım aldım.

 public static void exportToExcel(DataSet source, string fileName) { const string endExcelXML = "</Workbook>"; 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 "; 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(); } 
9
23 июля '15 в 10:55 2015-07-23 10:55 Cavab Harsha.Vaswani verilir 23 iyul, '15 10:55 2015-07-23 10:55

Самый простой и быстрый способ создания файла Excel из С# - использовать инструмент производительности Open XML. Инструмент производительности Open XML поставляется с установкой Open XML SDK. Инструмент реверсирует любой файл Excel в код С#. Затем код С# можно использовать для повторного создания этого файла.

Обзор процесса:

  1. Установите SDK Open XML с помощью инструмента.
  2. Создайте файл Excel, используя последний клиент Excel с желаемым внешним видом. Назовите его DesiredLook.xlsx .
  3. С помощью инструмента откройте DesiredLook.xlsx и нажмите кнопку Reflect Code рядом с верхней. 2019
ответ дан Taterhead 28 февр. '17 в 2:30 2017-02-28 02:30

Посмотрите образцы, как создавать файлы Excel.

Есть примеры в С# и VB.NET

Он управляет файлами XSL XSLX и CSV Excel.

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

8
ответ дан Bonnie Cornell 12 апр. '11 в 10:04 2011-04-12 10:04
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос