使用OleDb C#将数据写入Excel时出错:此表包含超出此电子表格

时间:2015-12-27 16:34:08

标签: c# excel oledb

我不知道为什么我一直收到错误:

  

'此表包含超出定义的单元格范围的单元格   在此电子表格中

我试图将从传感器连续接收的数据写入Excel文档。我尝试过使用" INSERT INTO"和"更新"这些陈述似乎都不起作用。我希望有人可以解决可能出现的问题并提供可能解决方案的提示。

我终于设法通过调整代码来部分修复问题,但现在问题是发生了同样的错误,但是在程序将数据写入excel文件的第一行和第二行之后,当它关于写在第三行,它输出错误;请注意,对于扩展名为.xls的excel文件,会出现此问题。

但是当我尝试使用.xlsx文件时,程序似乎只能在第一行写入,然后在尝试写入第二行时输出相同的错误。对我可能做错的任何建议?

感谢。

以下是代码:

private void ProcessRxdSerialData(string rxdSerialData, int rxdSerialVal)
    {

        try
        {
            if (!string.IsNullOrEmpty(rxdSerialData))
            {
                Console.WriteLine(rxdSerialData);
                HandleRxdSerialDataResponse(rxdSerialData);

                TimeElapsed = TimeElapsed + 1;
                m_mainForm.PlotGraphs(rxdSerialVal, TimeElapsed);

                string columnSelect = "A";

                m_mainForm.XlsxWrite(rxdSerialData, m_mainForm.DataStorageFileLocation, columnSelect);
            }

        } //try

        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

    }



 public void XlsxWrite(string rxdSerialData, string dataStorageLocation, string columnSelect)
    {
        try
        {
            Invoke(new MethodInvoker(
                   delegate
                   {
                       if ((checkBoxEnableWriteToExcel.Checked) &&
                           (!string.IsNullOrEmpty(textBoxDataStorageLocation.Text)))
                       {
                           RowCount = RowCount + 1;
                           WriteRxdSerialDataToExcel(rxdSerialData, dataStorageLocation, RowCount, columnSelect);
                       }
                       else
                       {
                           RowCount = 0;
                       }
                   }));
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

    }


public void WriteRxdSerialDataToExcel(string rxdSerialData, string dataStorageLocation, int timeElapse, string columnSelect)
    {
        int row = timeElapse;
        string column = columnSelect;

        //Converting Row integer to string
        string rowStr = row.ToString();

        //Open Excel File to conduct Write/Update process
        string fileLocation = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dataStorageLocation +
                                  @";Extended Properties=""Excel 12.0; HDR=No;IMEX=3;ImportMixedTypes=Text;TypeGuessRows=0"""; //for reading data IMEX = 1, for writting data IMEX = 3
        OleDbConnection pathConnection = new OleDbConnection(fileLocation);
        pathConnection.Open();

        //write the data into the Excel Spread sheet
        string rowColumnCoordinate = String.Concat(column, rowStr);
        string excelWrite = String.Format("UPDATE [Sheet1${0}:{0}] SET F1='{1}'", rowColumnCoordinate, rxdSerialData);
        OleDbCommand command = new OleDbCommand(excelWrite, pathConnection);
        command.ExecuteNonQuery();
        pathConnection.Close();
    }

0 个答案:

没有答案