收到的串口数据并放置在excel中 [英] serial port data received and placeing in excel

查看:254
本文介绍了收到的串口数据并放置在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆