• excel 合并单元格


    最近用devexpress做excel export,发现devexpress对cell merge的case支持不是很好,没办法,只要调用excel api自己去做merge了。devexpress的mege就是对某列按顺序对相同的值进行merge。写了一个方法,对导出的excel进行merge,如下:

     1 private void mergeCell2(string fileName, int rowNumber, List<int> columnIndex)
     2         {
     3             Microsoft.Office.Interop.Excel.Application _excelApp = new Microsoft.Office.Interop.Excel.Application();
     4 
     5             try
     6             {
     7                 _excelApp.DisplayAlerts = false;
     8                 _excelApp.ScreenUpdating = true;
     9 
    10 
    11                 Workbook workBook = _excelApp.Workbooks.Open(fileName,
    12                     XlUpdateLinks.xlUpdateLinksAlways, Type.Missing, Type.Missing, Type.Missing,
    13                     Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    14                     Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    15                     Type.Missing, Type.Missing);
    16 
    17                 Worksheet sheet1 = workBook.Worksheets[1as Worksheet;
    18 
    19                 for (int loopClmIndx = 0; loopClmIndx < columnIndex.Count; loopClmIndx++)
    20                 {
    21                     char columnName = Convert.ToChar(Convert.ToInt32('A') + columnIndex[loopClmIndx]);
    22 
    23                     Range c1 = sheet1.get_Range(string.Format("{0}{1}", columnName, 2),
    24                         string.Format("{0}{1}", columnName, rowNumber + 1));
    25 
    26                     object[,] vv = c1.Cells.Value2 as object[,];
    27                     if (vv != null)
    28                     {
    29                         int mergeStartIndx = -1;
    30 
    31                         for (int rowIndx = 1; rowIndx <= vv.Length;rowIndx++)
    32                         {
    33                             mergeStartIndx = rowIndx;
    34                             object tempValue = vv[rowIndx, 1];
    35                             string strTempValue = tempValue == null ? string.Empty : tempValue.ToString();
    36 
    37                             while (rowIndx < vv.Length)
    38                             {
    39                                 object tempNextValue = vv[rowIndx + 11];
    40                                 string strTempNextValue = tempNextValue == null ? string.Empty : tempNextValue.ToString();
    41 
    42                                 if (strTempNextValue.Equals(strTempValue))
    43                                 {
    44                                     rowIndx++;
    45                                 }
    46                                 else
    47                                 {
    48                                     break;
    49                                 }
    50                             }
    51 
    52                             if (mergeStartIndx != rowIndx)
    53                             {
    54                                 Range rg = sheet1.get_Range(string.Format("{0}{1}", columnName, mergeStartIndx+1),
    55                                      string.Format("{0}{1}", columnName, rowIndx+1));
    56 
    57                                 if (rg != null)
    58                                 {
    59                                     rg.Merge(false);
    60                                 }
    61 
    62                                 Marshal.ReleaseComObject(rg);
    63                             }
    64                         }                       
    65                     }
    66                 }
    67 
    68                 workBook.Save();
    69                 workBook.Close(true, Type.Missing, Type.Missing);
    70 
    71                 Marshal.ReleaseComObject(sheet1);
    72                 Marshal.ReleaseComObject(workBook);
    73             }
    74             finally
    75             {
    76                 if (_excelApp != null)
    77                 {
    78                     _excelApp.Quit();
    79                     _excelApp = null;
    80                     GC.SuppressFinalize(this);
    81                 }
    82             }
    83         }

     注意,如果excel的cell没有值,没有值的相邻的格子也必须合并。

  • 相关阅读:
    hdu4276 依赖背包
    poj1155 依赖背包
    cf219d 基础换根法
    贪婪大陆——(树状数组)
    数星星(树状数组或者线段树)
    拓扑排序基础题——排序
    Codeforces Round #511 (Div. 1) T2 Little C Loves 3 II
    除虫药水(简单dp)
    烽火传递(单调队列优化dp,然而蒟蒻用一个优先队列做)
    ZOJ----3471Most powerful(简单状压dp)
  • 原文地址:https://www.cnblogs.com/fgynew/p/2496428.html
Copyright © 2020-2023  润新知