解决方案 »

  1.   

    总显示索引超出数组界限,自己搜索了一下,好像是说不能保证数组tD[]范围不确定,可是我不理解tD[]范围怎么不确定了?
    我原代码写入Excel部分是这样写的,想把t1_1,t1_2;t2_1,t2_2写入Excel,单步运行的时候可以得到t1_1,t1_2;t2_1,t2_2:
                       objExcelWorkSheetTemp.Cells[n + 1, 2] = t1_1.Trim();//写入数据
                       objExcelWorkSheetTemp.Cells[n + 1, 3] = t2_1.Trim();//写入数据
                       objExcelWorkSheetTemp.Cells[n + 1, 4] = t1_2.Trim();//写入数据
                       objExcelWorkSheetTemp.Cells[n + 1, 5] = t2_2.Trim();//写入数据
    初学者,倒腾了一晚上也没搞明白,请高手指点。
      

  2.   

    自己又发现一个小问题,好像是void OPExcel()中 最后的objExcelApp.Quit();太早了,所以接下来写Excel时Excel已经关掉了。把这一句注释掉就可以往下进行了,但是Excel中仍然没有数据,中间会出现一个提示框,是否将当前文件替换掉,无论选择Y/N都没有数据。
      

  3.   

    objExcelWorkSheetTemp.UsedRange在这里添加一个监视看看。
      

  4.   

    引用NPOI.dll
    using NPOI;
     用这个试试
     //创建工作薄
                 HSSFWorkbook wk = new HSSFWorkbook();          
                 ISheet tb = wk.CreateSheet("mySheet");             int j = 0;             string[] t ={"1 2 3 4 5 6 7"};// File.ReadAllLines("test.txt", Encoding.Default);
                 ICell cell;
                 foreach (string s in t)
                 {
                     j++;
                     IRow row = tb.CreateRow(j);
                     string[] scell=s.Split(' ');
                     for (int i = 0; i < scell.Count(); i++)
                     {
                         string c = scell[i].ToString();                    
                         cell = row.CreateCell(i);  
                         cell.SetCellValue(c);
                     }
                 } 
                 using (FileStream fs = File.OpenWrite(@"d:\\myxls.xls")) 
                 {
                     wk.Write(fs);  
                     MessageBox.Show("创建成功!");
                 }
      

  5.   


            private void Form1_Load(object sender, EventArgs e)
            {
                DateTime dt = DateTime.Now;
                textBox1.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";
                }
             
           private  void WriteEx(int line)
            {
                 int rowNum = textBox1.Lines.Length;
                if (rowNum == 0 ) //控件里没有数据
                {
                    return;
                }
                if (rowNum > 0)//控件里有数据
                {
                    
                        
                    for (int rowIndex = 0; rowIndex < textBox1.Lines.Length; rowIndex++)//将数据导入Excel
                    {
                        string ss = textBox1.Lines[rowIndex].ToString();  //读取相对应行的数据,也可以用于测试
                        string  []str = System.Text.RegularExpressions.Regex.Split(ss, " ");
                        int i = 0;
                        
                        for (int col = 1; col < str.Length+1; col++)
                        {
                            objExcelWorkSheetTemp.Cells[line, col] = str[i] + "\t";
                            //objExcelWorkSheetTemp.Cells[rowIndex, col] = Convert.ToString(textBox1.Lines[rowIndex].ToString()) + "\t";//读取到的Textbox控件里的数据导入到Excel
                            i++;
                        }
                        line++;
                    }
                   
                }
            }
           private  void OpenEx() 
            
            {
                objExcelApp = new Microsoft.Office.Interop.Excel.Application();//建立一个Excel应用
                objExcelApp.Visible = false;//Excel是否可见
                objExcelApp.DisplayAlerts = false;//屏蔽一些弹出窗口
                objExcelWorkBooks = objExcelApp.Workbooks; //建立一个属于本应用的工作簿集合
                string test = DateTime.Now.ToString("yyyy-MM-dd");
                int n=0;
                if (File.Exists("E:/C#程序/Test1/串口测试/Myexcel_read_save/" + test + ".xls"))
                {                objExcelWorkbook = objExcelWorkBooks.Open("E:/C#程序/Test1/串口测试/Myexcel_read_save/" + test,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    // 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                    objExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)objExcelWorkbook.Worksheets[1];//在工作簿中指定一页
                    objExcelWorkSheet.Select(Type.Missing);
                    objExcelWorkSheetTemp = (Microsoft.Office.Interop.Excel.Worksheet)objExcelApp.ActiveSheet;//建立动态页                n = objExcelWorkSheetTemp.UsedRange.Cells.Rows.Count + 1;            }
                // Microsoft.Office.Interop.Excel.Application objexcel = new Microsoft.Office.Interop.Excel.Application();
                else
                {
                    objExcelWorkbook = objExcelWorkBooks.Add(Type.Missing);//向工作簿集合中添加一个工作簿
             objExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)objExcelWorkbook.Worksheets[1];//在工作簿中指定一页
                    objExcelWorkSheet.Select(Type.Missing);
                    objExcelWorkSheetTemp = (Microsoft.Office.Interop.Excel.Worksheet)objExcelApp.ActiveSheet;//建立动态页
                    n = objExcelWorkSheetTemp.UsedRange.Cells.Rows.Count;
                }
                WriteEx(n);
                objExcelWorkbook.SaveAs(@"E:\C#程序\Test1\串口测试\Myexcel_read_save\" + test);
                objExcelWorkbook.Close();
                objExcelWorkBooks.Close();
               
             }
      

  6.   

    写了一个读取文本框中的字符串并写入Excel的测试程序。有缺陷,但是运行起来没有问题。
      

  7.   

    然后写了一个接收串口传术的数据在文本框中显示并写入Excel,写Excel的方法用的是与上同样的方法结果运行效果不一样,总是出现一个是否将原有文件代替的提示,虽然选择Yes后Excel文件一样可以保存不受影响,但是感觉很麻烦,还是想知道问题出在哪里?怎么改才能不让这是提示出现?高手们帮忙看看指点一下~
      

  8.   

    objExcelApp.ActiveWorkbook.SaveAs("d:\\test.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
      

  9.   

    这么多代码看着挺累的。
    你设置断点一步步调试看看,在发生超出索引那里,看看索引一共是多少,你获取的又是多少,是源不对了还是你给你的index不对。
      

  10.   

    像你这种情况,直接错误,肯定是COM组件内部引发异常导致(感觉这是废话^_^)而之所以引发COM组件内部异常,大多数情况下,是某个对象为空,而你却又去使用它。
      

  11.   

    自己解决了。这不是错误,在建立Excel后添加了一句 objExcelApp.DisplayAlerts = false;把可以直接屏蔽一些弹出窗口,问题就解决了,谢谢各位的关注~
    分享一个关于Excel保存出现弹出框的原因的链接:http://hi.baidu.com/moer4ball/blog/item/a3ab7d1f1f439cc4a686691f.html 
    大家一起学习,共同进步!