Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Excel(2010)电子表格中填充SQL Server数据_C#_Excel_Odbc_Vsto - Fatal编程技术网

C# 在Excel(2010)电子表格中填充SQL Server数据

C# 在Excel(2010)电子表格中填充SQL Server数据,c#,excel,odbc,vsto,C#,Excel,Odbc,Vsto,我正在尝试将从SQL Server提取的数据填充到Excel 2010中。下面的代码运行良好,但困难在于我没有以编程方式创建Excel电子表格,它是aleady存在的,我通过用C#编写的Excel插件请求数据。 即使我将光标设置为10个单元格,Excel也会从第一个单元格开始填充数据,并覆盖标题(标题已经存在)。请帮忙修理。 代码: odbc连接cnn; cnn=新的ODBC连接(azureConn); 使用(OdbcCommand=cnn.CreateCommand()) { command.

我正在尝试将从SQL Server提取的数据填充到Excel 2010中。下面的代码运行良好,但困难在于我没有以编程方式创建Excel电子表格,它是aleady存在的,我通过用C#编写的Excel插件请求数据。 即使我将光标设置为10个单元格,Excel也会从第一个单元格开始填充数据,并覆盖标题(标题已经存在)。请帮忙修理。 代码:

odbc连接cnn;
cnn=新的ODBC连接(azureConn);
使用(OdbcCommand=cnn.CreateCommand())
{
command.CommandText=“{call sp_Get_Excel_Data(?,,,,,,,,,,,,,?)}”;
command.Parameters.AddWithValue(“@StartDate”,StartDate);
command.Parameters.AddWithValue(“@EndDate”,EndDate);
command.Parameters.AddWithValue(“@startTime”,startTime);
command.Parameters.AddWithValue(“@endTime”,endTime);
command.Parameters.AddWithValue(“@smp”,smp);
command.Parameters.AddWithValue(“@Reg”,Reg);
command.Parameters.AddWithValue(“@event”,events);
command.Parameters.AddWithValue(“@userId”,userId);
cnn.Open();
//数据表
OdbcDataAdapter=新的OdbcDataAdapter(命令);
//数据集
数据集ds=新数据集();
适配器。填充(ds);
//转换到数据表
DataTable=ds.Tables[0];
string[]colNames=新字符串[dataTable.Columns.Count];
int col=0;
foreach(dataTable.Columns中的DataColumn dc)
colNames[col++]=dc.ColumnName;
w=this.Application.ActiveWorkbook;
ws=(工作表)w.ActiveSheet;
Range hdrRow=(Range)ws.Rows[9];
hdrRow.Value=colNames;
hdrRow.Font.Bold=true;
hdrRow.VerticalAlignment=XlVAlign.xlVAlignCenter;
//定位光标
var范围=ws.get_范围(“A10”);
range.Select();
//将列和值插入Excel文件
字符串数据=null;
int i=0;
int j=0;

对于(i=0;i我讨厌回答我自己的问题,但以下是解决方案(具有优化的性能):

OdbcConnection cnn;
                cnn = new OdbcConnection(azureConn);
                using (OdbcCommand command = cnn.CreateCommand())
                {
                    command.CommandText = "{call sp_Get_Excel_Data(?,?,?,?,?,?,?,?)}";
                    command.Parameters.AddWithValue("@StartDate", startDate);
                    command.Parameters.AddWithValue("@EndDate", endDate);
                    command.Parameters.AddWithValue("@startTime", startTime);
                    command.Parameters.AddWithValue("@endTime", endTime);
                    command.Parameters.AddWithValue("@smp", smp);
                    command.Parameters.AddWithValue("@Reg", reg);
                    command.Parameters.AddWithValue("@event", events);
                    command.Parameters.AddWithValue("@userId", userId);

                    cnn.Open();

                    //DataTable
                    OdbcDataAdapter adapter = new OdbcDataAdapter(command);

                    //DataSet
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);

                    //Cast to DataTable
                    DataTable dataTable = ds.Tables[0];

                    string[] colNames = new string[dataTable.Columns.Count];
                    int col = 0;

                    foreach (DataColumn dc in dataTable.Columns)
                        colNames[col++] = dc.ColumnName;

                    w = this.Application.ActiveWorkbook;
                    ws = (Worksheet)w.ActiveSheet;

                    Range hdrRow = (Range)ws.Rows[9];

                    hdrRow.Value = colNames;
                    hdrRow.Font.Bold = true;
                    hdrRow.VerticalAlignment = XlVAlign.xlVAlignCenter;

                    //Position the cursor
                    var range = ws.get_Range("A10");
                    range.Select();

                    //Inserting the Column and Values into Excel file
                    string data = null;
                    int i = 0;
                    int j = 0;

                    for (i = 0; i <= dataTable.Rows.Count - 1; i++)
                    {
                        for (j = 0; j <= dataTable.Columns.Count - 1; j++)
                        {
                            data = dataTable.Rows[i].ItemArray[j].ToString();
                            ws.Cells[i + 2, j + 1] = data;

                        }
                    }
                    int column = 1;
                    foreach (DataColumn c in dataTable.Columns)
                    {
                        //Ninth row, starting from the first cell
                        ws.Cells[10, column] = c.ColumnName;
                        column++;
                    }

                    // Create a 2D array with the data from the data table
                    int i = 0;
                    string[,] data = new string[dataTable.Rows.Count, dataTable.Columns.Count];
                    foreach (DataRow row in dataTable.Rows)
                    {
                        int j = 0;
                        foreach (DataColumn c in dataTable.Columns)
                        {
                            data[i, j] = row[c].ToString();
                            j++;
                        }
                        i++;
                    }

                    // Set the range value to the 2D array in Excel (10th row, starting from 1st cell)
                    ws.Range[ws.Cells[11, 1], ws.Cells[dataTable.Rows.Count + 11, dataTable.Columns.Count]].Value = data;