C铉は数十万級のデータを実現してExcelとExcelの各種の操作の実例を導きます。


先にコードをエクスポートします  

  /// <summary> 
      ///        
      /// </summary> 
      /// <param name="list"><  ,  ></param> 
      /// <param name="filepath"></param> 
      /// <returns></returns> 
      public bool NewExport(List<DictionaryEntry> list, string filepath) 
      { 
        bool bSuccess = true; 
        Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application(); 
        System.Reflection.Missing miss = System.Reflection.Missing.Value; 
        appexcel = new Microsoft.Office.Interop.Excel.Application(); 
        Microsoft.Office.Interop.Excel.Workbook workbookdata = null; 
        Microsoft.Office.Interop.Excel.Worksheet worksheetdata = null; 
        Microsoft.Office.Interop.Excel.Range rangedata; 
   
        workbookdata = appexcel.Workbooks.Add(); 
   
        //        
        appexcel.Visible = false; 
        appexcel.DisplayAlerts = false; 
        try 
        { 
          foreach (var lv in list) 
          { 
            var keys = lv.Key as List<string>; 
            var values = lv.Value as List<IList<object>>; 
            worksheetdata = (Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets.Add(miss, workbookdata.ActiveSheet); 
   
            for (int i = 0; i < keys.Count-1; i++) 
            { 
              //        
              worksheetdata.Name = keys[0];//            
              worksheetdata.Cells[1, i + 1] = keys[i+1]; 
            } 
   
            //           ,          a2   
            rangedata = worksheetdata.get_Range("a2", miss); 
            Microsoft.Office.Interop.Excel.Range xlrang = null; 
   
            //irowcount     ,    
            int irowcount = values.Count; 
            int iparstedrow = 0, icurrsize = 0; 
   
            //ieachsize        ,       
            int ieachsize = 10000; 
   
            //icolumnaccount     ,     
            int icolumnaccount = keys.Count-1; 
   
            //        ieachsize×icolumnaccount   ,ieachsize          ,icolumnaccount          
            object[,] objval = new object[ieachsize, icolumnaccount]; 
            icurrsize = ieachsize; 
   
            while (iparstedrow < irowcount) 
            { 
              if ((irowcount - iparstedrow) < ieachsize) 
                icurrsize = irowcount - iparstedrow; 
   
              // for        
              for (int i = 0; i < icurrsize; i++) 
              { 
                for (int j = 0; j < icolumnaccount; j++) 
                { 
                  var v = values[i + iparstedrow][j]; 
                  objval[i, j] = v != null ? v.ToString() : ""; 
                } 
              } 
              string X = "A" + ((int)(iparstedrow + 2)).ToString(); 
              string col = ""; 
              if (icolumnaccount <= 26) 
              { 
                col = ((char)('A' + icolumnaccount - 1)).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString(); 
              } 
              else 
              { 
                col = ((char)('A' + (icolumnaccount / 26 - 1))).ToString() + ((char)('A' + (icolumnaccount % 26 - 1))).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString(); 
              } 
              xlrang = worksheetdata.get_Range(X, col); 
              xlrang.NumberFormat = "@"; 
              //   range value2  ,        excel 
              xlrang.Value2 = objval; 
              iparstedrow = iparstedrow + icurrsize; 
            } 
          } 
          ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet1"]).Delete(); 
          ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet2"]).Delete(); 
          ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet3"]).Delete(); 
          //      
          workbookdata.SaveAs(filepath, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss); 
          workbookdata.Close(false, miss, miss); 
          appexcel.Workbooks.Close(); 
          appexcel.Quit(); 
   
          System.Runtime.InteropServices.Marshal.ReleaseComObject(workbookdata); 
          System.Runtime.InteropServices.Marshal.ReleaseComObject(appexcel.Workbooks); 
          System.Runtime.InteropServices.Marshal.ReleaseComObject(appexcel); 
          GC.Collect(); 
        } 
        catch (Exception ex) 
        { 
          ErrorMsg = ex.Message; 
          bSuccess = false; 
        } 
        finally 
        { 
          if (appexcel != null) 
          { 
            ExcelImportHelper.KillSpecialExcel(appexcel); 
          } 
        } 
        return bSuccess; 
      }

range.NumberFormatLocal = "@";   //             
  
range = (Range)worksheet.get_Range("A1", "E1");   //  Excel       :    Excel     
  
range.Merge(0);   //          
  
worksheet.Cells[1, 1] = "Excel     ";   //Excel        
  
range.Font.Size = 15;   //         
  
range.Font.Underline=true;   //             
  
range.Font.Name="  ";              
  
range.HorizontalAlignment=XlHAlign.xlHAlignCenter;   //                 
  
range.ColumnWidth=15;   //           
  
range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();   //            
  
range.Borders.LineStyle=1;   //             
  
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());   //          
  
range.Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; //               
  
range.EntireColumn.AutoFit();   //         
  
Range.HorizontalAlignment= xlCenter;   //            
  
Range.VerticalAlignment= xlCenter   //           
  
Range.WrapText=true;   //         
  
Range.Interior.ColorIndex=39;   //           
  
Range.Font.Color=clBlue;   //       
  
xlsApp.DisplayAlerts=false;  // Excel            
ApplicationClass xlsApp = new ApplicationClass(); // 1.   Excel           ,            Excel    。 
if (xlsApp == null) 
{ 
//        ,   null                Excel 
} 
1.既存のExcelファイルを開く  

Workbook workbook = xlsApp.Workbooks.Open(excelFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
Worksheet mySheet = workbook.Sheets[1] as Worksheet; //   sheet  
mySheet.Name = "testsheet"; //    sheet   
2.sheetページをコピーする  

mySheet.Copy(Type.Missing, workbook.Sheets[1]);
//  mySheet     sheet ,        mySheet       (2),    testsheet(2),    ,Worksheet       
ここのCopyメソッドの2つのパラメータは、指定されたsheetページの前か後ろか、コピーされたsheetページが最初のsheetページの後ろにあることを意味します。 
3.sheetページを削除する  

xlsApp.DisplayAlerts = false; //       sheet ,        fasle。 
(xlsApp.ActiveWorkbook.Sheets[1] as Worksheet).Delete(); 
4.sheetページを選択  

(xlsApp.ActiveWorkbook.Sheets[1] as Worksheet).Select(Type.Missing); // sheet  
  
5.エクセルファイルを別存する  

workbook.Saved = true; 
workbook.SaveCopyAs(filepath); 
6.エクセル資源の解放  

workbook.Close(true, Type.Missing, Type.Missing); 
workbook = null; 
xlsApp.Quit(); 
xlsApp = null;
方法2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Data;

namespace ExcelTest
{
  public class ExcelUtil
  {
    System.Data.DataTable table11 = new System.Data.DataTable();

    public void ExportToExcel(System.Data.DataTable table, string saveFileName)
    {

      bool fileSaved = false;

      //ExcelApp xlApp = new ExcelApp();

      Application xlApp = new Application();

      if (xlApp == null)
      {
        return;
      }

      Workbooks workbooks = xlApp.Workbooks;
      Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
      Worksheet worksheet = (Worksheet)workbook.Worksheets[1];//  sheet1

      long rows = table.Rows.Count;

      /*                  ,    :    HRESULT:0x800A03EC。  :Excel 2003  sheet        

      //Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count+2, gridview.Columns.View.VisibleColumns.Count+1]);

      //fchR.Value2 = datas;*/

      if (rows > 65535)
      {

        long pageRows = 60000;//         ,      

        int scount = (int)(rows / pageRows);

        if (scount * pageRows < table.Rows.Count)//      pageRows   ,            
        {
          scount = scount + 1;
        }

        for (int sc = 1; sc <= scount; sc++)
        {
          if (sc > 1)
          {

            object missing = System.Reflection.Missing.Value;

            worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(

            missing, missing, missing, missing);//    sheet

          }

          else
          {
            worksheet = (Worksheet)workbook.Worksheets[sc];//  sheet1
          }

          string[,] datas = new string[pageRows + 1, table.Columns.Count+ 1];

for (int i = 0; i < table.Columns.Count; i++) //    
          {
            datas[0, i] = table.Columns[i].Caption;
          }

          Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
          range.Interior.ColorIndex = 15;//15    
          range.Font.Bold = true;
          range.Font.Size = 9;

          int init = int.Parse(((sc - 1) * pageRows).ToString());
          int r = 0;
          int index = 0;
          int result;

          if (pageRows * sc >= table.Rows.Count)
          {
            result = table.Rows.Count;
          }
          else
          {
            result = int.Parse((pageRows * sc).ToString());
          }
          for (r = init; r < result; r++)
          {
            index = index + 1;
            for (int i = 0; i < table.Columns.Count; i++)
            {
              if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
              {
                object obj = table.Rows[r][table.Columns[i].ColumnName];
                datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();// obj.ToString()                

              }

            }
          }

          Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 2, table.Columns.Count + 1]);

          fchR.Value2 = datas;
          worksheet.Columns.EntireColumn.AutoFit();//     。

          range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, table.Columns.Count]);

          //15    

          range.Font.Size = 9;
          range.RowHeight = 14.25;
          range.Borders.LineStyle = 1;
          range.HorizontalAlignment = 1;

        }

      }

      else
      {

        string[,] datas = new string[table.Rows.Count + 2, table.Columns.Count + 1];
        for (int i = 0; i < table.Columns.Count; i++) //         
        {
          datas[0, i] = table.Columns[i].Caption;
        }

        Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
        range.Interior.ColorIndex = 15;//15    
        range.Font.Bold = true;
        range.Font.Size = 9;

        int r = 0;
        for (r = 0; r < table.Rows.Count; r++)
        {
          for (int i = 0; i < table.Columns.Count; i++)
          {
            if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
            {
              object obj = table.Rows[r][table.Columns[i].ColumnName];
              datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();// obj.ToString()                

            }

          }

          //System.Windows.Forms.Application.DoEvents();

}

        Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 2, table.Columns.Count + 1]);

        fchR.Value2 = datas;
        
        worksheet.Columns.EntireColumn.AutoFit();//     。

        range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 1, table.Columns.Count]);

        //15    

        range.Font.Size = 9;
        range.RowHeight = 14.25;
        range.Borders.LineStyle = 1;
        range.HorizontalAlignment = 1;
      }

      if (saveFileName != "")
      {
        try
        {
          workbook.Saved = true;
          workbook.SaveCopyAs(saveFileName);
          fileSaved = true;

        }

        catch (Exception ex)
        {
          fileSaved = false;
        }

      }

      else
      {

        fileSaved = false;

      }

      xlApp.Quit();

      GC.Collect();//     
  
    }
  }
}

方法3:
まず公式サイトに行きます。http://npoi.codeplex.com/ダウンロードはdllを導入する必要があります。
エクスポートコード:

NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("test_01");

//    
NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("      ");

//    
NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(1);
row2.CreateCell(0).SetCellValue("      ");

// ...

//        
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();

インポートコード:

HSSFWorkbook hssfworkbook; 
#region 
public DataTable ImportExcelFile(string filePath) 
{ 
  #region//      
  try 
  { 
    using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 
    { 
      hssfworkbook = new HSSFWorkbook(file); 
    } 
  } 
  catch (Exception e) 
  { 
    throw e; 
  } 
  #endregion 
 
  NPOI.SS.UserModel.Sheet sheet = hssfworkbook.GetSheetAt(0); 
  System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); 
  DataTable dt = new DataTable(); 
  for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) 
  { 
    dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString()); 
  } 
  while (rows.MoveNext()) 
  { 
    HSSFRow row = (HSSFRow)rows.Current; 
    DataRow dr = dt.NewRow(); 
    for (int i = 0; i < row.LastCellNum; i++) 
    { 
      NPOI.SS.UserModel.Cell cell = row.GetCell(i); 
      if (cell == null) 
      { 
        dr[i] = null; 
      } 
      else 
      { 
        dr[i] = cell.ToString(); 
      } 
    } 
    dt.Rows.Add(dr); 
  } 
  return dt; 
} 
#endregion
使い方:
まず、空白のブックをテスト用に作成し、空白のシートを作成し、表に空白の行を作成し、行にセルを作成し、内容を記入します。

//       
IWorkbook workbook = new HSSFWorkbook();
//     :       
ISheet sheet = workbook.CreateSheet();
//     :   ,     , 0 
IRow row = sheet.CreateRow(0);
//   :     ,     , 0 
ICell cell = row.CreateCell(0);
//       
cell.SetCellValue("     ");
セルのスタイルを設定します。セルのスタイルを設定するには、必ず新しいスタイルオブジェクトを作成して設定してください。そうでないと、シートのすべてのセルのスタイルが一緒に設定されます。共有すべきはスタイルオブジェクトです。

ICellStyle style = workbook.CreateCellStyle();
//        :      
style.Alignment = HorizontalAlignment.CENTER;
//          
IFont font = workbook.CreateFont();
//        
font.Boldweight = short.MaxValue;
//  SetFont                 
style.SetFont(font);
//          
cell.CellStyle = style;
セルの幅の高さを設定:
セルの高さを設定するのは実際に行の高さを設定するため、セルの行に行の高さを設定します。行の高さ設定値はピクセルポイントの1/20のようです。したがって、*20は設定効果を達成します。
セルの幅を設定すると実際に列の幅が設定されますので、セルの列に設定します。幅の値は文字の1/256のようです。したがって、*256は設定効果を達成します。

//        
row.Height = 30 * 20;
//        
sheet.SetColumnWidth(0, 30 * 256);
セルの結合:セルの結合は、実際には、範囲内のセルが結合されることを宣言しています。結合された内容とスタイルは、その範囲の一番左上のセルに準じています。

//           ,        CellRangeAddress  
//CellRangeAddress     :   ,   ,   ,   
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));
 数式を追加します。CellのCelFormulaを使って数式を設定します。文字列です。数式の前に=を追加する必要はありません。

//  Cell CellFormula         
// :         ,       '='
ICell cell2 = sheet.CreateRow(1).CreateCell(0);
cell2.CellFormula = "HYPERLINK(\"    .jpg\",\"    .jpg\")";
 ブックをファイルに書き込み、効果を確認します。

//        
using (FileStream fs = new FileStream("    .xls", FileMode.Create, FileAccess.Write))
{
 workbook.Write(fs);
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。