C# 写excel c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 总显示索引超出数组界限,自己搜索了一下,好像是说不能保证数组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();//写入数据初学者,倒腾了一晚上也没搞明白,请高手指点。 自己又发现一个小问题,好像是void OPExcel()中 最后的objExcelApp.Quit();太早了,所以接下来写Excel时Excel已经关掉了。把这一句注释掉就可以往下进行了,但是Excel中仍然没有数据,中间会出现一个提示框,是否将当前文件替换掉,无论选择Y/N都没有数据。 objExcelWorkSheetTemp.UsedRange在这里添加一个监视看看。 引用NPOI.dllusing 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("创建成功!"); } 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(); } 写了一个读取文本框中的字符串并写入Excel的测试程序。有缺陷,但是运行起来没有问题。 然后写了一个接收串口传术的数据在文本框中显示并写入Excel,写Excel的方法用的是与上同样的方法结果运行效果不一样,总是出现一个是否将原有文件代替的提示,虽然选择Yes后Excel文件一样可以保存不受影响,但是感觉很麻烦,还是想知道问题出在哪里?怎么改才能不让这是提示出现?高手们帮忙看看指点一下~ 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); 这么多代码看着挺累的。你设置断点一步步调试看看,在发生超出索引那里,看看索引一共是多少,你获取的又是多少,是源不对了还是你给你的index不对。 像你这种情况,直接错误,肯定是COM组件内部引发异常导致(感觉这是废话^_^)而之所以引发COM组件内部异常,大多数情况下,是某个对象为空,而你却又去使用它。 自己解决了。这不是错误,在建立Excel后添加了一句 objExcelApp.DisplayAlerts = false;把可以直接屏蔽一些弹出窗口,问题就解决了,谢谢各位的关注~分享一个关于Excel保存出现弹出框的原因的链接:http://hi.baidu.com/moer4ball/blog/item/a3ab7d1f1f439cc4a686691f.html 大家一起学习,共同进步! 如何能高效的进行数组内元素相加 c#搜索txt文件 写一个判断……标题长长长 求助:msxml上传图片问题 急问:XML入ORACLE库的问题 分不够尽管说 如何用程式調用MSINFO32.EXE 産生我所需要的LOG檔; 怎么向WORD插入文件摘要 自己做了一个入门级的聊天软件(c#),socket需要入门的兄弟们哪去看看!!不是源码砍我头 添加数据时出错 呵呵,大家进来讨论一下,一个即时通信模块的快发! 请教怎么在类中调用主窗口中的控件? 在DataTable新增加一列qty3,使用Ds.WriteXML的方式新增的列没有写到文件中,不知为什么
我原代码写入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();//写入数据
初学者,倒腾了一晚上也没搞明白,请高手指点。
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("创建成功!");
}
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();
}
你设置断点一步步调试看看,在发生超出索引那里,看看索引一共是多少,你获取的又是多少,是源不对了还是你给你的index不对。
分享一个关于Excel保存出现弹出框的原因的链接:http://hi.baidu.com/moer4ball/blog/item/a3ab7d1f1f439cc4a686691f.html
大家一起学习,共同进步!