zoukankan      html  css  js  c++  java
  • C# 写Excel

    1、引用 MicroSoft.Office.Interop.Excel  在

      C:WindowsassemblyGAC_MSILMicrosoft.Office.Interop.Excel15.0.0.0__71e9bce111e9429cMicrosoft.Office.Interop.Excel.dll

      及Office

      C:WindowsassemblyGAC_MSILoffice15.0.0.0__71e9bce111e9429cOFFICE.DLL

    2、初始信息

                System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    
                //初始化表信息
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                fileCounter = 1;
                if (xlApp == null)
                {
                    return;
                }
                xlApp.Visible = true;

    最后

    xlApp.ActiveWorkbook.Close(true, AppDomain.CurrentDomain.BaseDirectory + "检查结果");
    xlApp.Quit();

    3、一些好用的方法

    (1)处理sheet页

    /// <summary>
            /// 增加Sheet页,调整sheet名
            /// </summary>
            /// <param name="xlApp"></param>
            private void AddSheetAndRenameSheet(Microsoft.Office.Interop.Excel.Application xlApp)
            {
                Workbooks workbooks = xlApp.Workbooks;
                Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                //如果不去刻意设置表顺序,打开后的Excel只有个Sheet1,这时取1号就是当前的Sheet,再增加Sheet后,会在Sheet1的前面插入。
    Worksheet worksheet4
    = (Worksheet)workbook.Worksheets.get_Item(1); worksheet4.Name = "第四个表单"; PrintHeader(worksheet4, GetModelTable()); Worksheet worksheet3 = workbook.Worksheets.Add(); worksheet3.Name = "第三个表单"; PrintHeader(worksheet3, GetModelTable()); Worksheet worksheet2 = workbook.Worksheets.Add(); worksheet2.Name = "第二个表单"; PrintHeader(worksheet2, GetModelTable2()); Worksheet worksheet1 = workbook.Worksheets.Add(); worksheet1.Name = "第一个表单"; PrintHeader(worksheet1, GetModelTable3()); }

    (2)

    冻结表头

    /// <summary>
            /// 冻结表头
            /// </summary>
            /// <param name="xlApp"></param>
            private void FrozenHeader(Microsoft.Office.Interop.Excel.Application xlApp)
            {
                foreach (Worksheet workSheet in xlApp.ActiveWorkbook.Worksheets)
                {
                    workSheet.Activate();
                    xlApp.ActiveWindow.SplitRow = workSheet.UsedRange.CurrentRegion.Rows.Count;//当前已经用到的区域,通常只冻结第一行
                    //xlApp.ActiveWindow.SplitColumn = workSheet.UsedRange.CurrentRegion.Columns.Count;//当前已经用到的区域,冻结列。 不常用

              xlApp.ActiveWindow.FreezePanes = true;
    } }

    (3)输出表头

          /// <summary>
            /// 打印表头
            /// </summary>
            private void PrintHeader(Worksheet worksheet1, System.Data.DataTable dtInput)
            {
                Range range1;
                //表头
                for (int i = 0; i < dtInput.Columns.Count; i++)
                {
                    worksheet1.Cells[1, i + 1] = dtInput.Columns[i].ColumnName;
    
                    range1 = (Range)worksheet1.Cells[1, i + 1];
                    range1.Interior.ColorIndex = 15;
                    range1.Font.Bold = true;
                    range1.HorizontalAlignment = XlHAlign.xlHAlignCenter;//水平居中  
                    range1.ColumnWidth = 15;
                }
            }

    (4)将内容写入到Excel中

            /// <summary>
            /// 将指定的内容写入到Excel中
            /// </summary>
            /// <param name="xlApp"></param>
            /// <param name="SheetIndex">从多少行开始写第一个表内数据</param>
            /// <param name="startIndex"></param>
            /// <param name="dt"></param>
            private int PrintContent(Microsoft.Office.Interop.Excel.Application xlApp, int SheetIndex, int startIndex, System.Data.DataTable dtInput)
            {
                Workbooks workbooks = xlApp.Workbooks;
                Workbook workbook = workbooks[1];
                Worksheet worksheet = workbook.Worksheets[SheetIndex];
                worksheet.Activate();
                //表内容
                for (int i = 0; i < dtInput.Rows.Count; i++)
                {
                    ((Range)worksheet.Cells[startIndex + i + 2, 1]).Activate();//视角跟随
                    for (int j = 0; j < dtInput.Columns.Count; j++)
                    {
                        worksheet.Cells[startIndex + i + 1, j + 1] = dtInput.Rows[i][j].ToString();
                    }
                }
                startIndex += dtInput.Rows.Count;
                return startIndex;
            }

    (5)将数据按照表写入Excel(批量写)

            /// <summary>
            /// 将指定的内容写入到Excel中
            /// </summary>
            private int PrintContentWithBulk(Microsoft.Office.Interop.Excel.Application xlApp, int sheetIndex, int startIndex, System.Data.DataTable dtInput)
            {
                Workbooks workbooks = xlApp.Workbooks;
                Workbook workbook = workbooks[1];
                Worksheet worksheet = workbook.Worksheets[sheetIndex];
                worksheet.Activate();
           //在内存中构造一个数据块
                object[,] objData = new Object[dtInput.Rows.Count, dtInput.Columns.Count];
                for (int i = 0; i < dtInput.Rows.Count; i++)
                    for (int j = 0; j < dtInput.Columns.Count; j++)
                        objData[i, j] = dtInput.Rows[i][j];
            //选中Excel中相同大小的一块数据
                Range r = worksheet.get_Range("A" + (1 + startIndex).ToString(), Missing.Value);
                r = r.get_Resize(dtInput.Rows.Count, dtInput.Columns.Count);
                r.Value = objData;
    
                startIndex += dtInput.Rows.Count;
                return startIndex;
            }

    (7)如果要填写的记录数可能大于Excel能接受的数目

            int fileCounter;
    
            /// <summary>
            /// 写数据
            /// </summary>
            void WriteContent()
            {
                System.Data.DataTable dtAlls = GetData();
    
                System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    
                //初始化表信息
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                fileCounter = 1;
                LineCounter = 0;
                if (xlApp == null)
                {
                    return;
                }
                xlApp.Visible = true;
                AddSheetAndRenameSheet(xlApp);
    
                for (int i = 0; i < dtAlls.Count; i++)
                {
                    if (LineCounter > 65000)//这里设置条目数接近Excel行数允许的最大值时,就创建第二个文档
                    {
                        AddBorder(xlApp);
                        xlApp.ActiveWorkbook.Close(true, AppDomain.CurrentDomain.BaseDirectory + "XXX数据结果" + "(" + fileCounter.ToString() + ")");
                        xlApp.Quit();
                        fileCounter++;
                        xlApp = new Microsoft.Office.Interop.Excel.Application();
                        if (xlApp == null)
                        {
                            return;
                        }
                        xlApp.Visible = true;
                        AddSheetAndRenameSheet(xlApp);
                        LineCounter = 1;
                    }
                    else
                    {//写入这个表的数据
                        lineCounter=PrintContent(xlApp, lineCounter,dt);
                    }
                }
                AddBorder(xlApp);
                if (fileCounter == 1)
                    xlApp.ActiveWorkbook.Close(true, AppDomain.CurrentDomain.BaseDirectory + "XXX数据结果");
                else
                    xlApp.ActiveWorkbook.Close(true, AppDomain.CurrentDomain.BaseDirectory + "XXX数据结果" + "(" + fileCounter.ToString() + ")");
                xlApp.Quit();
            }

     (8)视角跟随

     ((Range)worksheet.Cells[startIndex + i + 2, 1]).Activate();//视角跟随

    (9)加边框

            /// <summary>
            /// 给所有的表格加边框
            /// </summary>
            /// <param name="xlApp"></param>
            private void AddBorder(Microsoft.Office.Interop.Excel.Application xlApp)
            {
                foreach (Worksheet workSheet in xlApp.ActiveWorkbook.Worksheets)
                {
                    int RowCount = workSheet.UsedRange.CurrentRegion.Rows.Count;
                    int ColumnCount = workSheet.UsedRange.CurrentRegion.Columns.Count;
    
                    Range range = workSheet.Range[workSheet.Cells[1, 1], workSheet.Cells[RowCount, ColumnCount]];//设置边框
    
                    range.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                    range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic);
                }
                
            }
  • 相关阅读:
    Linux软件安装管理
    Linux软件安装管理
    Linux软件安装管理
    Ubuntu下安装python相关数据处理
    2016/09/23
    2016/09/22
    2016/09/21
    2016/09/20
    HDU1054 Strategic Game(树形dp)
    HDU1011 Starship Troopers(树形dp)
  • 原文地址:https://www.cnblogs.com/adamgq/p/13566176.html
Copyright © 2011-2022 走看看