C# Excel开发指南

发布时间:2023-05-20

一、Excel文件读取与写入

Excel文件是业界广泛的数据交换格式。在C#开发中,我们可以利用Excel COM对象,来实现对Excel文件的操作,包括读取和写入。 首先,我们需要在VS中引入COM对象。在项目中的“引用”中,添加Microsoft Excel 16.0 Object Library。

using Microsoft.Office.Interop.Excel;
using System.IO;
namespace ExcelReadWrite
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Excel对象
            Application excel = new Application();
            //打开Excel文件
            Workbook workbook = excel.Workbooks.Open(@"D:\test.xlsx");
            //获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);
            //读取单元格内容
            string cellContent = worksheet.Cells[1, 1].Value.ToString();
            Console.WriteLine(cellContent);
            //写入单元格内容
            worksheet.Cells[1, 2] = "Hello World";
            //保存并关闭Excel文件
            workbook.Save();
            workbook.Close();
        }
    }
}

代码中,我们首先创建了一个Excel对象,然后打开指定路径下的Excel文件。获取第一个工作表,并读取第一个单元格的内容。最后,在第一行第二列写入内容,并保存修改。

二、Excel图表处理

Excel图表是一个非常实用的数据可视化工具。在C#中,我们也可以通过Excel COM对象,来实现对Excel图表的操作,包括添加、修改、删除等。 下面的代码演示了如何在Excel中创建一个图表,并设置其属性:

using Microsoft.Office.Interop.Excel;
namespace ExcelCharts
{    
    class Program
    {
        static void Main(string[] args)
        {
            //创建Excel对象
            Application excel = new Application();
            //创建新的Excel文件
            Workbook workbook = excel.Workbooks.Add();
            //获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);
            //添加数据
            worksheet.Cells[1, 1] = "Month";
            worksheet.Cells[1, 2] = "Sales";
            worksheet.Cells[2, 1] = "Jan";
            worksheet.Cells[2, 2] = "100";
            worksheet.Cells[3, 1] = "Feb";
            worksheet.Cells[3, 2] = "200";
            worksheet.Cells[4, 1] = "Mar";
            worksheet.Cells[4, 2] = "300";
            //添加图表
            ChartObjects chartObjs = (ChartObjects)worksheet.ChartObjects(Type.Missing);
            ChartObject chartObj = chartObjs.Add(300, 50, 300, 250);
            Chart chart = chartObj.Chart;
            //设置图表属性
            chart.ChartType = XlChartType.xlColumnClustered;
            chart.SetSourceData(worksheet.get_Range("A1:B4", Type.Missing), Type.Missing);
            //保存Excel文件
            workbook.SaveAs(@"D:\testChart.xlsx");
            workbook.Close();
        }
    }
}

代码中,我们首先创建一个Excel对象,然后新建一个Excel文件。添加数据,然后再添加一个图表,并设置其类型和数据源。最后保存Excel文件。

三、Excel数据操作

Excel作为一个数据交换格式,在实际开发中,经常需要进行数据操作,包括排序、筛选等。 下面的代码演示了如何对Excel数据进行排序和筛选:

using Microsoft.Office.Interop.Excel;
namespace ExcelDataManipulation
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Excel对象
            Application excel = new Application();
            //打开Excel文件
            Workbook workbook = excel.Workbooks.Open(@"D:\test.xlsx");
            //获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);
            //数据排序
            Range sortRange = worksheet.Range["A2:C5"];
            sortRange.Sort(sortRange.Columns[1], XlSortOrder.xlDescending,
            sortRange.Columns[2], Type.Missing, XlSortOrder.xlAscending,
            Type.Missing, XlSortOrder.xlAscending, XlYesNoGuess.xlYes,
            Type.Missing, Type.Missing, XlSortOrientation.xlSortColumns,
            XlSortMethod.xlPinYin, XlSortDataOption.xlSortNormal,
            XlSortDialogOrder.xlSortDialogOrder, XlSortLanguageID.xlSortLanguageIDDefault);
            //数据筛选
            Range criteriaRange = worksheet.Range["A1:C5"];
            criteriaRange.AutoFilter(1, ">200", XlAutoFilterOperator.xlAnd, Type.Missing, true);
            //保存并关闭Excel文件
            workbook.Save();
            workbook.Close();
        }
    }
}

代码中,我们首先创建一个Excel对象,然后打开指定路径下的Excel文件。获取第一个工作表,然后分别对数据进行了排序和筛选操作,最后保存并关闭Excel文件。

四、Excel图像处理

Excel中也支持插入图片,操作方式类似于Windows窗体的Image控件。 下面的代码演示了如何读取、插入和处理Excel中的图像:

using Microsoft.Office.Interop.Excel;
namespace ExcelImage
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Excel对象
            Application excel = new Application();
            //打开Excel文件
            Workbook workbook = excel.Workbooks.Open(@"D:\test.xlsx");
            //获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);
            //读取图像
            Range picRange = worksheet.Range["D1:D3"];
            foreach (Shape picShape in picRange.Shapes)
            {
                //插入图像
                string picPath = @"D:\" + picShape.Name + ".png";
                picShape.CopyPicture(XlPictureAppearance.xlScreen, XlCopyPictureFormat.xlBitmap);
                Image img = Clipboard.GetImage();
                img.Save(picPath, System.Drawing.Imaging.ImageFormat.Png);
                //更改图像大小和位置
                picShape.Height = 100;
                picShape.Width = 100;
                picShape.Left = picShape.Left + picShape.Width + 10;
                picShape.Top = picShape.Top + picShape.Height + 10;
                //删除原有图像
                picShape.Delete();
                FileInfo file = new FileInfo(picPath);
                worksheet.Shapes.AddPicture(file.FullName, MsoTriState.msoFalse, MsoTriState.msoTrue,
                picShape.Left, picShape.Top, picShape.Width, picShape.Height);
            }
            //保存并关闭Excel文件
            workbook.Save();
            workbook.Close();
        }
    }
}

代码中,我们首先创建一个Excel对象,然后打开指定路径下的Excel文件。获取第一个工作表,读取需要操作的图像,并插入到新位置,最后删除原有图像,保存Excel文件。

五、Excel表格处理

Excel中的表格是一种非常常见的数据结构,我们可以通过C#的Excel COM对象,对其中的表格进行操作,包括表格对齐、单元格合并等。 下面的代码演示了如何对Excel表格进行操作,包括对齐、单元格合并等:

using Microsoft.Office.Interop.Excel;
namespace ExcelTable
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Excel对象
            Application excel = new Application();
            //打开Excel文件
            Workbook workbook = excel.Workbooks.Open(@"D:\test.xlsx");
            //获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);
            //对齐
            Range alignRange = worksheet.Range["A1:C5"];
            alignRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;
            alignRange.VerticalAlignment = XlVAlign.xlVAlignCenter;
            //单元格合并
            Range mergeRange = worksheet.Range["D1:E1"];
            mergeRange.MergeCells = true;
            mergeRange.Value = "Sales Report";
            //保存并关闭Excel文件
            workbook.Save();
            workbook.Close();
        }
    }
}

代码中,我们首先创建一个Excel对象,然后打开指定路径下的Excel文件。获取第一个工作表,然后对选定区域进行了对齐和单元格合并操作,最后保存并关闭Excel文件。