C# Excel实时存储求助

maxlong83 2017-08-29 10:06:51
VS2017新手,如题,需要创建Excel文件,用作数据存储文档来存储IO口接收的信息。
关键在于需要每1秒存储一次信息,Excel文档中每次增加500-600字节数据,数据不断增加,最后数据量会很大,所以不便最后一次性存储。现在我的思路是先通过按钮创建文档,然后再1秒定时器中做数据添加,但是要在定时器中每次开关Excel进程,导致程序运行时卡的厉害,影响其他功能。但是又想不到如何简化,请大侠指点,不胜感谢。
先采用按钮创建路径为ExcelSave的Excel文档,没问题
而后这是定时器部分代码:不知有什么方法能简化一下
private void timer1_Tick(object sender, EventArgs e) //Timer1 events (1000ms)
{
label3.Text = DateTime.Now.ToString(); //Display time
SerialFlag = 1;
if(DataSaveFlag == 1)//若Excel文档已建立完毕则开始记录
{//Excel数据库信息每秒递增
Microsoft.Office.Interop.Excel.Application myExcel = null;//引用Excel Application类別
Workbook myBook = null;//引用活页簿类別
Worksheet mySheet = null;//引用工作表类別
myExcel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel Application
myBook = myExcel.Workbooks.Open(ExcelSave);
myExcel.DisplayAlerts = false;//停用警告
myExcel.Visible = false; //Excel 不可见
mySheet = myBook.Worksheets[1];//Excel文件打开工作簿的第一个文件
mySheet.Cells[excelrow, excelcolumn]=100;
excelrow++;
///////////////////////
myBook.SaveAs(ExcelSave);
myBook.Close(false, Type.Missing, Type.Missing);//关闭
myExcel.Quit();//关闭Excel
///////////////////////杀死进程////
IntPtr t = new IntPtr(myExcel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
}
...全文
314 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41765527 2018-10-05
  • 打赏
  • 举报
回复
你好请问一下你这全局变量怎么用的
constanline 2017-08-30
  • 打赏
  • 举报
回复
如果运行期间外部程序不需要调用这个Excel文件的话,不需要每次Timer_Tick的时候打开关闭,做成全局变量保持常开,Timer_Tick中只存取即可。
xdashewan 2017-08-30
  • 打赏
  • 举报
回复
文件不变的情况下,打开后暂时不关,每次save即可,全部完成后最后再关闭excel
maxlong83 2017-08-30
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
文件不变的情况下,打开后暂时不关,每次save即可,全部完成后最后再关闭excel
引用 2 楼 constanline 的回复:
如果运行期间外部程序不需要调用这个Excel文件的话,不需要每次Timer_Tick的时候打开关闭,做成全局变量保持常开,Timer_Tick中只存取即可。
OK了,多谢。将Excel变量声明为全局变量就行,在Timer里只操作单元格和保存,只是跟普通的变量声明方法有点不同。 十分感谢 public partial class Form1 : Form { Microsoft.Office.Interop.Excel.Application ExcelApp;//ExcelApp声明为全局变量 Microsoft.Office.Interop.Excel.Workbook ExcelDoc;//ExcelDoc声明为全局变量 Microsoft.Office.Interop.Excel.Worksheet xlSheet1;//xlSheet1声明为全局变量 ............. }
vlevle 2017-08-30
  • 打赏
  • 举报
回复
先添加到文本文件里,关闭的时候再一次性写入xls文件

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧