收到的串口数据并放置在excel中 [英] serial port data received and placeing in excel
问题描述
正在接收来自serialport的数据,用于测试我正在接受两个应用程序。
从串口接收,并按下按钮点击excel。
这是接收和放置的代码:
am receing data from serialport, for testing am taking two applications.
am receiving from serialport ,and placing in excel in button click.
Here is the code for receiving and placing:
private void Download_Click(object sender, EventArgs e)
{
try
{
Excel.Application xlApp = default(Excel.Application);
Excel.Workbook xlWorkBook = default(Excel.Workbook);
Excel.Worksheet xlWorkSheet = default(Excel.Worksheet);
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "Name";
xlWorkSheet.Cells[1, 2] = "ID Number";
xlWorkSheet.Cells[1, 3] = "Installment";
xlWorkSheet.Cells[1, 4] = "Paid Amount";
xlWorkSheet.Cells[1, 5] = "Due Amount";
xlWorkSheet.Cells[1, 1].Interior.ColorIndex = 39;
xlWorkSheet.Cells[1, 2].Interior.ColorIndex = 39;
xlWorkSheet.Cells[1, 3].Interior.ColorIndex = 39;
xlWorkSheet.Cells[1, 4].Interior.ColorIndex = 39;
xlWorkSheet.Cells[1, 5].Interior.ColorIndex = 39;
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
string[] lines = Regex.Split(s, "[$#,]");
foreach (String line in lines)
{
// MessageBox.Show("split Value:" + line);
if (line != "")
{
for (int p = 2; p < 50; p++)
{
for (int q = 0; q < 7; q++)
xlWorkSheet.Cells[p, q] = line; //here is the error place
}
}
}
xlWorkBook.SaveAs(fName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
catch (Exception p)
{
MessageBox.Show(p.Message);
}
finally
{
if (xlApp != null)
releaseObject(xlApp);
if (xlWorkBook != null)
releaseObject(xlWorkBook);
if (xlWorkSheet != null)
releaseObject(xlWorkSheet);
}
if (System.IO.File.Exists(fName))
{
if (MessageBox.Show("Would you like to open the excel file?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
System.Diagnostics.Process.Start(fName);
}
catch (Exception ex)
{
MessageBox.Show("Error opening the excel file." + Environment.NewLine +
ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
/* for (int p = 0; p <2; p++)
{
inputdata = serialPort1.ReadExisting();
MessageBox.Show("Read:" + inputdata);
}*/
if (inputdata == "$M121,0#")
MessageBox.Show("value is:" + inputdata);
else
{
if (!serialPort1.IsOpen)
return;
Thread.Sleep(50);
byte[] buffer = new byte[serialPort1.BytesToRead];
serialPort1.Read(buffer, 0, buffer.Length);
s = System.Text.ASCIIEncoding.ASCII.GetString(buffer);
// MessageBox.Show(s);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但是在excel中存储时出错了;作为
COM异常未处理:来自HRESULT的异常:0x800A03EC
和stacktrace是:
System.Runtimetype.ForwardCallToInvokeManager(String MemberName,bindingFlags flag,Object target,Int32 [] a Wrapper Types,messageData& msgdata)
at Microsoft.Office .Interop.Excel.Range.Set_Default(Object RowIndex,Object ColumnIndex,Object value)
我已经在第1行添加了列名,并尝试从第2行插入数据行向前
but am getting error while storing in excel; as
COM Exception unhandled:Exception from HRESULT: 0x800A03EC
and stacktrace is:
System.Runtimetype.ForwardCallToInvokeManager(String MemberName,bindingFlags flag,Object target,Int32[] a Wrapper Types,messageData&msgdata)
at Microsoft.Office.Interop.Excel.Range.Set_Default(Object RowIndex, Object ColumnIndex,Object value)
Already i added column names at row 1.and trying to insert data from 2nd row onwards
推荐答案
#,]);
foreach (< span class =code-sdkkeyword> String line in lines)
{
// MessageBox.Show(split value:+ line);
if (line!= )
{
for ( int p = 2 ; p < 50 ; p ++)
{
for ( int q = 0 ; q < 7 ; q ++)
xlWorkSheet.Cells [p,q] = line; // 这里是错误的地方
}
}
}
xlWorkBook.SaveAs(fName,Excel.XlFileFormat.xlWorkbookNormal,misValue,misValue,misValue,misValue,Excel.XlSaveAsAccessMode.xlExclusive, misValue,misValue,misValue,misValue,misValue);
xlWorkBook.Close( true ,misValue,misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
catch (例外p)
{
MessageBox.Show(p.Message);
}
最后
{
if (xlApp != null )
releaseObject(xlApp);
if (xlWorkBook!= null )
releaseObject(xlWorkBook);
if (xlWorkSheet!= null )
releaseObject(xlWorkSheet);
}
if (System.IO.File.Exists(fName))
{
if (MessageBox.Show( 你想打开excel文件吗? , this .Text,MessageBoxButtons.YesNo,MessageBoxIcon.Question)== DialogResult.Yes)
{
try
{
System.Diagnostics.Process.Start(fName);
}
catch (Exception ex)
{
MessageBox.Show( 打开excel文件时出错。 + Environment.NewLine +
ex.Message,这个 .Text,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
}
私人 void releaseObject( object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null ;
}
catch (例外情况)
{
obj = null 跨度>;
MessageBox.Show( 无法释放对象 + ex.ToString()) ;
}
最后
{
GC.Collect();
}
}
private void serialPort1_DataReceived( object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
/ * for(int p = 0; p< 2; p ++)
{
inputdata = serialPort1.ReadExisting();
MessageBox.Show(Read:+ inputdata);
} * /
if (inputdata ==
#,]"); foreach (String line in lines) { // MessageBox.Show("split Value:" + line); if (line != "") { for (int p = 2; p < 50; p++) { for (int q = 0; q < 7; q++) xlWorkSheet.Cells[p, q] = line; //here is the error place } } } xlWorkBook.SaveAs(fName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); } catch (Exception p) { MessageBox.Show(p.Message); } finally { if (xlApp != null) releaseObject(xlApp); if (xlWorkBook != null) releaseObject(xlWorkBook); if (xlWorkSheet != null) releaseObject(xlWorkSheet); } if (System.IO.File.Exists(fName)) { if (MessageBox.Show("Would you like to open the excel file?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { try { System.Diagnostics.Process.Start(fName); } catch (Exception ex) { MessageBox.Show("Error opening the excel file." + Environment.NewLine + ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { /* for (int p = 0; p <2; p++) { inputdata = serialPort1.ReadExisting(); MessageBox.Show("Read:" + inputdata); }*/ if (inputdata == "
M121,0#)
MessageBox.Show( 值为: + inputdata);
else
{
if (!serialPort1 .IsOpen)
return ;
Thread.Sleep( 50 );
byte [] buffer = new byte [serialPort1.BytesToRead];
serialPort1.Read(buffer, 0 ,buffer.Length);
s = System.Text.ASCIIEncoding.ASCII.GetString(buffer);
// MessageBox.Show(s);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
M121,0#") MessageBox.Show("value is:" + inputdata); else { if (!serialPort1.IsOpen) return; Thread.Sleep(50); byte[] buffer = new byte[serialPort1.BytesToRead]; serialPort1.Read(buffer, 0, buffer.Length); s = System.Text.ASCIIEncoding.ASCII.GetString(buffer); // MessageBox.Show(s); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
但是在excel中存储时出错了;作为
COM异常未处理:来自HRESULT的异常:0x800A03EC
和stacktrace是:
System.Runtimetype.ForwardCallToInvokeManager(String MemberName,bindingFlags flag,Object target,Int32 [] a Wrapper Types,messageData& msgdata)
at Microsoft.Office .Interop.Excel.Range.Set_Default(Object RowIndex,Object ColumnIndex,Object value)
我已经在第1行添加了列名,并尝试从第2行插入数据向前排
but am getting error while storing in excel; as
COM Exception unhandled:Exception from HRESULT: 0x800A03EC
and stacktrace is:
System.Runtimetype.ForwardCallToInvokeManager(String MemberName,bindingFlags flag,Object target,Int32[] a Wrapper Types,messageData&msgdata)
at Microsoft.Office.Interop.Excel.Range.Set_Default(Object RowIndex, Object ColumnIndex,Object value)
Already i added column names at row 1.and trying to insert data from 2nd row onwards
这篇关于收到的串口数据并放置在excel中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!