Programação C #, um método de usar EPPlus para manipular arquivos Excel

1. A escolha entre EPPlus e NPOI

1. Ao importar e exportar dados em programas de desktop, os arquivos do Excel serão manipulados. Os controles de terceiros comumente usados ​​incluem NPOI e EPPlus .
2. Comparado com o NPOI, o API do EPPlus é mais amigável e a capacidade de exportar dados é mais poderosa do que o NPOI. No entanto, NPOI é ainda mais forte na função de operação do Excel ( comparação entre C #
NPOI exportando Excel e EPPlus exportando Excel
): 20 colunas, NPOI pode exportar 40.000 dados e exportar 50.000 dados quando a memória estourar. EPPlus pode exportar mais de 200.000 dados e estouro de memória ao exportar 230.000 testes.

3. Se você deseja exportar um Excel mais complexo, pode usar o NPOI, mas o EPPlus basicamente atende às necessidades gerais.

2. Introdução básica do EPPlus

EPPlus é um formato de arquivo que usa Open Office XML (xlsx), que pode ler e gravar Excel 2007/2010 e não oferece suporte ao Excel 2003.
O componente de código aberto do arquivo não requer a instalação do Office no computador ao exportar o Excel. Endereço do site oficial: http://epplus.codeplex.com/ Se você
usá-lo, poderá obter a dll correspondente diretamente do NuGet.

pontos de função

Intervalo de células, estilo de célula, borda, cor, preenchimento, fonte, número, alinhamento), gráfico, imagem, forma, comentário, proteção de tabela, criptografia, tabela dinâmica, verificação de dados, formato condicional, cálculo de fórmula VBA

3. URL de referência

Introdução
Introdução Exemplos de recomendações de
atributos comumente usados
: Tutorial de uso de EPlus Uso avançado de
atributos simples

4. Instalação

instalação do gerenciador nuget

Insira a descrição da imagem aqui
Preste atenção aos requisitos de versão .net à direita
Insira a descrição da imagem aqui

5. Atenção

As instruções oficiais do EPPlus apontam que desde a 5ª edição o acordo de código aberto mudou, para uso comercial é necessária uma licença e o desenvolvimento pessoal pode ser usado diretamente através da configuração.
Se você usar a versão mais recente sem configuração, um erro será relatado.

Código fonte antes da versão 5

Código-fonte da versão 5

Método 1 de configuração de licença: use a propriedade LicenseContext na classe ExcelPackage

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using(var package = new ExcelPackage(new FileInfo("MyWorkbook.xlsx")))
{
    
    
}

Método 2 de configuração de licença: app.config

<appSettings>
    <!--The license context used-->
    <add key="EPPlus:ExcelPackage.LicenseContext" value="NonCommercial" />
</appSettings>

6, leia o arquivo

					//这里的文件选择对话框需要引用windows.forms程序集
 					OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = "Excel文件(*.xls;*.xlsx)|*.xls;*.xlsx|所有文件|*.*";//文件类型
                    ofd.FilterIndex = 2;//默认选择上面类型中的第几个,从左到右,从1开始。
                    ofd.Title = "选择具体的文件";//对话框左上角标题
                    ofd.InitialDirectory = @"D:\";//默认打开的文件夹
                    ofd.Multiselect = false;//是否允许选中多个文件
                    ofd.ValidateNames = true;//验证用户输入是否是一个有效的Windows文件名。
                    ofd.CheckPathExists = true;//验证路径有效性。
                    ofd.CheckFileExists = true;//验证文件有效性。
                    ofd.ShowHelp = true;//出现一个帮助按钮,自定义帮助信息。
                    if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
    
    
                        FilePath  = ofd.FileName;
					   //得到文件路径后,可以直接使用路径,也可以使用文件流的方式
		               //FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
		               //using (ExcelPackage package = new ExcelPackage(fs)
		                 
		                ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
		                using (ExcelPackage package = new ExcelPackage(new FileInfo(FilePath)))
		                {
    
    
		                	//whichsheet指sheet表序号,从0开始
		                    ExcelWorksheet sheet = package.Workbook.Worksheets[whichsheet];
		                    var rownum = sheet.Dimension.Rows;//总行
		                    var colnum = sheet.Dimension.Rows;//总列
		                   
		                    //int minColumnNum = sheet.Dimension.Start.Column;//工作区开始列
		                    //int maxColumnNum = sheet.Dimension.End.Column; //工作区结束列
		                    //int minRowNum = sheet.Dimension.Start.Row; //工作区开始行号
		                    //int maxRowNum = sheet.Dimension.End.Row; //工作区结束行号
							
							//strlist是临时定义的一个存放获取的单元格数值的列表
		                    strlist.Clear();
		                    for (int i = 1; i <= rownum; i++)
		                    {
    
    
		                        var contstr = sheet.Cells[$"A{i}"].Value;//A是指A列,这里对A列所有的行进行读值
		                        if (contstr == null)//单元格没数值是空值
		                        {
    
    
		                            strlist.Add(new GridValue(""));
		                            continue;
		                        }
		                        strlist.Add(new GridValue(sheet.Cells[$"A{i}"].Value.ToString()));
		                    }
		                }
                    }
                    

7, escrever arquivos

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (ExcelPackage package = new ExcelPackage(new FileInfo(FilePath)))
            {
    
    
                ExcelWorksheet sheet = package.Workbook.Worksheets[0];
                var rownum = sheet.Dimension.Rows;
                var colnum = sheet.Dimension.Columns;
                for (int i = 1; i <= rownum; i++)
                {
    
    
                    sheet.Cells[$"A{i}"].Value = "要写入的数值";
                }
                sheet.Cells[rownum, colnum].AutoFitColumns(0);//尝试自动调整列的宽度,如果有合并单元格,则不起作用
                package.Save();
            }
            System.Windows.MessageBox.Show("保存成功。");

8. Atributos comuns

1. Propriedades do arquivo, propriedade Propriedades pode definir algumas propriedades do Office

Insira a descrição da imagem aqui

2. Atributos da folha

sheet.DefaultColWidth = 10; //默认列宽
sheet.DefaultRowHeight = 30; //默认行高
sheet.TabColor = Color.Blue; //Sheet Tab的颜色
sheet.Cells.Style.WrapText = true; //单元格文字自动换行
sheet.Cells.AutoFitColumns(0);//自动调整所有列的宽度
sheet.Cells[rownum, colnum].AutoFitColumns(0);//自动调整指定范围内所有列的宽度

3. Especifique o estilo da linha ou coluna (largura, altura, oculto, quebra automática de linha, formato de número, bloqueio, etc.)

sheet.Column(1).Width = 10;
sheet.Row(1).Height = 30;
sheet.Column(1).Hidden = true;
sheet.Row(1).Hidden = true;
sheet.Column(1).Style.WrapText = true;
sheet.Column(1).Style.Numberformat.Format = "$#,###.00";
sheet.Row(1).Style.Locked = true;

4. Classe ExcelRange de intervalo de células

//获取单元格范围的
public ExcelRange this[string Address] {
    
     get; }//Address是指"A1:C5"这种格式,如果没有字母,只是数字3:3表示整个第3行
public ExcelRange this[int Row, int Col] {
    
     get; }
public ExcelRange this[int FromRow, int FromCol, int ToRow, int ToCol] {
    
     get; }

//复制单元格:
public void Copy(ExcelRangeBase Destination);

//从二维数据集合中装载数据:
public ExcelRangeBase LoadFromCollection<T>(IEnumerable<T> Collection);
public ExcelRangeBase LoadFromDataReader(IDataReader Reader, bool PrintHeaders);
public ExcelRangeBase LoadFromText(FileInfo TextFile);
//这里的文件是指CSV文件
//数据装载时,会与ExcelRange的行列进行对应,将值设置到其中,这些单元格没有样式和数字格式

5, oficial

sheet.Cells[1, 3].range.Formula = "AVERAGE(A1, B1)";
sheet.Cells[1, 3].FormulaR1C1 = "AVERAGE(RC[-2], RC[-1])";
//以上两个公式表达意思相同——对于第一行,C列的值等于A列和B列的平均值

6. Célula

worksheet.Cells[1, 1].Value = "名称";//直接指定行列数进行赋值
worksheet.Cells["A1"].Value = "名称";//直接指定单元格进行赋值

Acho que você gosta

Origin blog.csdn.net/qq_43307934/article/details/108549793
Recomendado
Clasificación