C铉は数十万級のデータを実現してExcelとExcelの各種の操作の実例を導きます。
先にコードをエクスポートします
3.sheetページを削除する
5.エクセルファイルを別存する
まず公式サイトに行きます。http://npoi.codeplex.com/ダウンロードはdllを導入する必要があります。
エクスポートコード:
まず、空白のブックをテスト用に作成し、空白のシートを作成し、表に空白の行を作成し、行にセルを作成し、内容を記入します。
セルの高さを設定するのは実際に行の高さを設定するため、セルの行に行の高さを設定します。行の高さ設定値はピクセルポイントの1/20のようです。したがって、*20は設定効果を達成します。
セルの幅を設定すると実際に列の幅が設定されますので、セルの列に設定します。幅の値は文字の1/256のようです。したがって、*256は設定効果を達成します。
/// <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);
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。