cē操作excel方式四-Asposeコントロール

10152 ワード


参考資料:http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html 
こちらは大きく書いてあります.複雑なレポートの作成もあります.興味がある方はご覧ください.
http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html
ここにAspposeの基礎知識があります.
 
方法1:エクセルの内容をdatableに読み込む
 DataTable _dt_Data;
初期化テーブルの列
 private void initDataTable()
        {
            _dt_Data = new DataTable();
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));
            _dt_Data.Columns.Add(new DataColumn("  "));

       
         

        }
エクセルを読み込み
 Workbook wb = new Workbook();
                    wb.Open(fileName);
                    Worksheet ws = wb.Worksheets[0];
                    int iRow = 0;
                    DataRow dr = _dt_Data.NewRow();

                    foreach (Cell c in ws.Cells)
                    {
                        if (c.Column > _dt_Data.Columns.Count - 1)
                        {
                            continue;
                        }
                        if (iRow != c.Row)
                        {
                            _dt_Data.Rows.Add(dr);
                            dr = _dt_Data.NewRow();
                        }

                        dr[c.Column] = c.StringValue;
                        iRow = c.Row;
                    }
                    _dt_Data.Rows.Add(dr);
エクセルに書き込む:
  private void AddExcelSheet(Aspose.Cells.Workbook wk, DataTable dt)
        {
            if (dt == null) return;

            for (int iColumnsCount = 0; iColumnsCount < dt.Columns.Count; iColumnsCount++)
            {
                wk.Worksheets[0].Cells[0, iColumnsCount].PutValue(dt.Columns[iColumnsCount].ColumnName);
            }
            for (int iRowsCount = 0; iRowsCount < dt.Rows.Count; iRowsCount++)
            {
                for (int iColumnsCount = 0; iColumnsCount < dt.Columns.Count; iColumnsCount++)
                {
                    wk.Worksheets[0].Cells[iRowsCount + 1, iColumnsCount].PutValue(dt.Rows[iRowsCount][iColumnsCount].ToString());
                }
            }
        }
  Aspose.Cells.Workbook wk = new Aspose.Cells.Workbook();
                AddExcelSheet(wk, _dt_Data);
                wk.Save(strFileName);
方法2:私達は直接にこの大きいカプセル化の種類を使ってエクセルの書き込みとエクセルの読み取りを実現します.
 
 
1.参照をダウンロードする:
aspose.cell.dll
 http://download.csdn.net/detail/q383965374/5264908
 
2.参照を追加:
c#操作excel方式四-Aspose控件_第1张图片
 
 

 
3.クラスの作成
c#操作excel方式四-Aspose控件_第2张图片
using System.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Drawing;

namespace excel4
{
    public class AsposeExcelTools
    {

        public static bool DataTableToExcel(DataTable datatable, string filepath, out string error)
        {
            error = "";
           
                if (datatable == null)
                {
                    error = "DataTableToExcel:datatable   ";
                    return false;
                }

                Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
                Aspose.Cells.Worksheet sheet = workbook.Worksheets[0];
                Aspose.Cells.Cells cells = sheet.Cells;

                int nRow = 0;
                foreach (DataRow row in datatable.Rows)
                {
                    nRow++;
                   
                        for (int i = 0; i < datatable.Columns.Count; i++)
                        {
                            if (row[i].GetType().ToString() == "System.Drawing.Bitmap")
                            {
                                //------      -------
                                System.Drawing.Image image = (System.Drawing.Image)row[i];
                                MemoryStream mstream = new MemoryStream();
                                image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg);
                                sheet.Pictures.Add(nRow, i, mstream);
                            }
                            else
                            {
                                cells[nRow, i].PutValue(row[i]);
                            }
                        }
                 
                }

                workbook.Save(filepath);
                return true;
            }
        
      
      

        /// 
        /// Excel     DataTable.
        /// 
        /// Excel      
        /// DataTable:   
        ///     :      ,      ""
        /// 
  
   true:       false:      
  
        public static bool ExcelFileToDataTable(string filepath, out DataTable datatable, out string error)
        {
            error = "";
            datatable = null;
            try
            {
                if (File.Exists(filepath) == false)
                {
                    error = "     ";
                    datatable = null;
                    return false;
                }
                Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
                workbook.Open(filepath);
                Aspose.Cells.Worksheet worksheet = workbook.Worksheets[0];
                datatable = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxRow + 1, worksheet.Cells.MaxColumn + 1);
                //-------------    -------------
                Aspose.Cells.Pictures pictures = worksheet.Pictures;
                if (pictures.Count > 0)
                {
                    string error2 = "";
                    //if (InsertPicturesIntoDataTable(pictures, datatable, out datatable, out error2) == false)
                    //{
                    //    error = error + error2;
                    //}
                }
                return true;
            }
            catch (System.Exception e)
            {
                error = e.Message;
                return false;
            }

        }


          }
      
    }

 書き込んだエクセルを選択するためのopendiogを追加します.
 
 書き込みボタンコード:
        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("test");
            dt.Columns.Add("ID");

            dt.Columns.Add("number");

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
            
                for (int i = 0; i < 100; i++)
                {
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        dr[j] = i.ToString();
                    }
                    dt.Rows.Add(dr);
                }

                string outError = "";

                AsposeExcelTools.DataTableToExcel(dt, openFileDialog1.FileName, out outError);


                if (!string.IsNullOrEmpty(outError))
                {
                    MessageBox.Show(outError);
                }
                else
                {
                    Process.Start(openFileDialog1.FileName);
                }


            }
        }
 
結果:
c#操作excel方式四-Aspose控件_第3张图片
 
 
読み出したデータを表示するためのgridviewを追加します.
 
 読出しボタンコード:
  private void button2_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("test");

            string outError = "";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                AsposeExcelTools.ExcelFileToDataTable(openFileDialog1.FileName,out dt,out outError);

                this.dataGridView1.DataSource = dt;
                this.dataGridView1.DataMember = dt.TableName;
            }


        }
結果:
c#操作excel方式四-Aspose控件_第4张图片
 
C胪表出力はAsppose...Cellsの引用についてです.
  警告1参照のプログラムセット「Aspossec.ells」を解析できませんでした.現在のターゲットフレームにないためです.  Version=4.0.00,Culture=neutral,PublicKeyToken=b 03 f 5 f 7 f 11 d 50 a 3 a"は依存関係を持っています.ターゲットフレームにないプログラムセットに対する参照を削除したり、アイテムのターゲットを再決定することを考慮してください.HandHygiene.UI
解決方法:
この問題が発生したのはlog 4 netダイナミックライブラリで発生しました.  プログラムの目的は.net 4 frame ebook client profileです.  プロジェクトの属性の中から.net 4 frame ebookを選択すればいいです.