当前位置:编程学习 > C#/ASP.NET >>

我的excel通过模板复制成几个sheet,为什么获取到一个往里面插入数据的时候怎么会报错

            public void WriteExcel(string filename, string filepath)
            {
                //创建Application对象
                Excel.Application xlsApp = new Excel.Application();

                xlsApp.Visible = false;

               int  rowCount  =  1000;         // 要插入数据的总行数
               int  colCount  =  7;            //要插入数据的总列数
               int  pageRows = 110;            //定义每页显示的行数,行数必须小于
               int  sheetCount = this.GetSheetCount(rowCount, pageRows);     // WorkSheet个数
               DateTime beforeTime;    
               DateTime afterTime;


                //得到WorkBook对象, 可以用两种方式
                //之一: 打开已有的文件E:\Documents and Settings\daniel.chen\Desktop\test.xls
                Excel.Workbook xlsBook = xlsApp.Workbooks.Open(filename, Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                //int sheetCount = this.GetSheetCount(matrixHeight, 100); //WorkSheet个数
                //指定要操作的Sheet
                Excel.Worksheet xlsSheet = (Excel.Worksheet)xlsBook.Sheets[1];
               
                
               // 复制sheetCount-1个WorkSheet对象
              for ( int  n = 1 ;n < sheetCount;n ++ )
              {
                  ((Excel.Worksheet)xlsBook.Worksheets.get_Item(n)).Copy(Type.Missing, xlsBook.Worksheets[n]);
              } 
                
                int matrixHeight = 400;
                int matrixWidth = 7;


                    for (int  n = 1 ;n <= sheetCount;n ++ )
                    {

                      int startRow = (n  -   1 )  *  pageRows;     // 记录起始行索引
                      int  endRow  =  n  *  pageRows;      // 记录结束行索引

                      if (n == sheetCount)
                      {
                          endRow = rowCount;
                      }
                      xlsSheet = (Excel.Worksheet)xlsBook.Worksheets.get_Item(n);
                      
                      xlsSheet.Name = "Sheet" + " - " + n.ToString();


                        //在单元格中写入数据
                        Excel.Range range3 = xlsSheet.get_Range("A1", Type.Missing);
                        Excel.Range range5 = xlsSheet.get_Range("A7", Type.Missing);
                        range3.Value2 = "Helloword";
                        range5.Value2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ;
                        range3.Borders.Color = Color.FromArgb(123, 231, 32).ToArgb();
                        range3.Font.Color = Color.Red.ToArgb();
                        range3.Font.Name = "Arial";
                        range3.Font.Size = 9;
                        //range3.Orientation = 90;   //vertical
                        range3.Columns.HorizontalAlignment = Excel.Constants.xlCenter;
                        range3.VerticalAlignment = Excel.Constants.xlCenter;
                        range3.Interior.Color = Color.FromArgb(192, 192, 192).ToArgb();
                        range3.Columns.AutoFit();//adjust the column width automatically

                        //在某个区域写入数据数组

                        string[,] martix = new string[endRow - startRow, colCount];

                        for (int i = 0; i < endRow - startRow; i++)

                            for (int j = 0; j < colCount; j++)
                            {
                                martix[i, j] = String.Format("{0}_{1}", i + 1, j + 1);
                            }

                        string startColName = GetColumnNameByIndex(0);

                        string endColName = GetColumnNameByIndex(matrixWidth - 1);

                        //取得某个区域,两种方法
                        //之一:
                        Excel.Range range4 = xlsSheet.get_Range("A1", Type.Missing);

                        range4 = range4.get_Resize(matrixHeight, matrixWidth);
                        //之二:
                        //Excel.Range range4 = xlsSheet.get_Range(String.Format("{0}{1}", startColName, 1), String.Format("{0}{1}", endColName, martixHeight));
                        //range4.Value2 = martix;

                        //range4.Font.Color = Color.Red.ToArgb();

                        //range4.Font.Name = "Arial";

                        //range4.Font.Size = 9;

                        //range4.Columns.HorizontalAlignment = Excel.Constants.xlCenter;


                        //设置column和row的宽度和颜色

                        int columnIndex = 3;

                        int rowIndex = 3;

                        string colName = GetColumnNameByIndex(columnIndex);

                        xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Columns.ColumnWidth = 20;

                        xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Rows.RowHeight = 40;

                        xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Columns.Interior.Color = Color.Blue.ToArgb();//单格颜色

                        xlsSheet.get_Range(5 + ":" + 7, Type.Missing).Rows.Interior.Color = Color.Yellow.ToArgb();//第5行到第7行的颜色
                        //xlsSheet.get_Range("G : G", Type.Missing).Columns.Interior.Color=Color.Pink.ToArgb();//第n列的颜色如何设置??

                        //保存,关闭
                        if (File.Exists(filepath))
                        {
                            // File.Delete(@"C:\Documents and Settings\user\デスクトップ\ssss\test1.xlsx");
                        }

                        xlsBook.SaveAs(filepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                        xlsBook.Close(false, Type.Missing, Type.Missing);

                        xlsApp.Quit();

                        GC.Collect();

                        //Console.ReadKey();
                    }
                }
            }

            //}
            //将column index转化为字母,至多两位
            public static string GetColumnNameByIndex(int index)
            {
                string[] alphabet = new string[] { "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
                string result = "";
                int temp = index / 26;
                int temp2 = index % 26 + 1;
                if (temp > 0)
                {
                    result += alphabet[temp];
                }
                result += alphabet[temp2];
                return result;
            }
        }

在 xlsSheet = (Excel.Worksheet)xlsBook.Worksheets.get_Item(n);这个地方报错,复制模板可以复制。错误是这样的   从它的客户端调用的对象已断开。 (例外情况从HRESULT:0x80010108(RPC_E_DISCONNECTED)的)
谁能帮帮忙解决一下


--------------------编程问答-------------------- 没人帮忙解决一下吗?

大神在哪里?

大侠在哪里?


出来帮忙解决一下啦
--------------------编程问答-------------------- 自己顶一下

在定于一下 --------------------编程问答-------------------- 有没有人来帮忙解决一下呀,自己是真么招了,分不多,
大侠们出来看看那
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,