如何在沒有安裝微軟Excel環境下操作Excel文件?


在以前接觸的項目中,由於很多客戶對微軟Excel的操作比較熟練,客戶經常要求系統支持對Excel文件的讀寫。用.NET傳統方法對Excel進行讀寫時,往往會涉及到不同版本兼容的問題,導致在本地測試一切正常,但是到客戶那經常會出現各種問題。后來發現一個Spire.XLS的NET庫,可以很方便的對不同版本的Excel文件進度操作,還可以生成各種常見的圖形。下面結合一個簡單的例子,看一下效果:

1、首先要安裝Spire.XLS,可以自定百度,然后建立一個windows應用程序WinExcelDemo,注意添加相關dll引用:

2、編寫代碼,這里當主界面打開時,就開始進行Excel的數據准備和文件生產操作,代碼如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 
 11 namespace WinExcelDemo
 12 {
 13     using Spire.Xls;
 14     using Spire.Xls.Charts;
 15     public partial class Form1 : Form
 16     {
 17         public Form1()
 18         {
 19             InitializeComponent();
 20         }
 21 
 22         private void Form1_Load(object sender, EventArgs e)
 23         {
 24             Run();
 25         }
 26         private void Run()
 27         {
 28             Workbook workbook = new Workbook();
 29 
 30             //初始化 工作簿worksheet
 31             workbook.CreateEmptySheets(1);
 32             Worksheet sheet = workbook.Worksheets[0];
 33             sheet.Name = "數據";
 34             sheet.GridLinesVisible = false;
 35 
 36             //創建圖形數據
 37             CreateChartData(sheet);
 38             //在工作簿中添加一個新的圖表
 39             Chart chart = sheet.Charts.Add();
 40 
 41             //設置數據的區域
 42             chart.DataRange = sheet.Range["A1:C5"];
 43             chart.SeriesDataFromRange = false;
 44 
 45             //設置圖的位置
 46             chart.LeftColumn = 1;
 47             chart.TopRow = 6;
 48             chart.RightColumn = 11;
 49             chart.BottomRow = 29;
 50             //圖類型
 51             chart.ChartType = ExcelChartType.Area;
 52             //圖標題
 53             chart.ChartTitle = "Sales market by country";
 54             chart.ChartTitleArea.IsBold = true;
 55             chart.ChartTitleArea.Size = 12;
 56 
 57             chart.PrimaryCategoryAxis.Title = "Country";
 58             chart.PrimaryCategoryAxis.Font.IsBold = true;
 59             chart.PrimaryCategoryAxis.TitleArea.IsBold = true;
 60 
 61             chart.PrimaryValueAxis.Title = "Sales(in Dollars)";
 62             chart.PrimaryValueAxis.HasMajorGridLines = false;
 63             chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90;
 64             chart.PrimaryValueAxis.MinValue = 1000;
 65             chart.PrimaryValueAxis.TitleArea.IsBold = true;
 66 
 67 
 68             foreach (Spire.Xls.Charts.ChartSerie cs in chart.Series)
 69             {
 70                 //不同顏色
 71                 cs.Format.Options.IsVaryColor = true;
 72                 //顯示數據標簽
 73                 cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
 74             }
 75             //Legend位置
 76             chart.Legend.Position = LegendPositionType.Top;
 77             workbook.SaveToFile("Sample.xls");
 78             ExcelDocViewer(workbook.FileName);
 79         }
 80 
 81         private void CreateChartData(Worksheet sheet)
 82         {
 83             //Country
 84             sheet.Range["A1"].Value = "Country";
 85             sheet.Range["A2"].Value = "Cuba";
 86             sheet.Range["A3"].Value = "Mexico";
 87             sheet.Range["A4"].Value = "France";
 88             sheet.Range["A5"].Value = "German";
 89 
 90             //Jun
 91             sheet.Range["B1"].Value = "Jun";
 92             sheet.Range["B2"].NumberValue = 6000;
 93             sheet.Range["B3"].NumberValue = 8000;
 94             sheet.Range["B4"].NumberValue = 9000;
 95             sheet.Range["B5"].NumberValue = 8500;
 96 
 97             //Jun
 98             sheet.Range["C1"].Value = "Aug";
 99             sheet.Range["C2"].NumberValue = 3000;
100             sheet.Range["C3"].NumberValue = 2000;
101             sheet.Range["C4"].NumberValue = 2300;
102             sheet.Range["C5"].NumberValue = 4200;
103 
104             //Style
105             sheet.Range["A1:C1"].Style.Font.IsBold = true;
106             sheet.Range["A2:C2"].Style.KnownColor = ExcelColors.LightYellow;
107             sheet.Range["A3:C3"].Style.KnownColor = ExcelColors.LightGreen1;
108             sheet.Range["A4:C4"].Style.KnownColor = ExcelColors.LightOrange;
109             sheet.Range["A5:C5"].Style.KnownColor = ExcelColors.LightTurquoise;
110 
111             //Border
112             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeTop].Color = Color.FromArgb(0, 0, 128);
113             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
114             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeBottom].Color = Color.FromArgb(0, 0, 128);
115             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
116             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeLeft].Color = Color.FromArgb(0, 0, 128);
117             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
118             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeRight].Color = Color.FromArgb(0, 0, 128);
119             sheet.Range["A1:C5"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
120 
121             sheet.Range["B2:C5"].Style.NumberFormat = "\"$\"#,##0";
122         }
123 
124         private void ExcelDocViewer(string fileName)
125         {
126             try
127             {
128                 //打開生成的Excel
129                 System.Diagnostics.Process.Start(fileName);
130             }
131             catch { }
132         }
133     }
134 }

3、運行代碼,可以看到如下結果:

 

4、總結

上面只是該庫很小一部分功能,該庫還能對Excel進行分組、支持VBA擴展等功能,該庫雖然強大,但是不開源,是商業軟件。不過經過了解,Spire.XLS也提供免費版,只不過免費版有一個Excel文檔不能超過5個sheet的限制。對於一些小項目,免費版也完全夠用可以考慮。至於較大應用,則需要商業版。NOPI是開源的Excel庫,也可以方便的進行Excel讀寫操作且無需安裝office,但功能不及Spire.XLS全面。開源和非開源,存在即合理,各有優勢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM