Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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单元格_C#_Excel_Winforms - Fatal编程技术网

C# 根据每次写入的数据递增excel单元格

C# 根据每次写入的数据递增excel单元格,c#,excel,winforms,C#,Excel,Winforms,目前,我必须指定要添加值的单元格。我喜欢以某种方式递增,比如说,无论用户点击addtofile按钮多少次,它都应该递增前面的模式。 我有: xlWorkSheet.Cells[1, 1] = comboBox2.Text; xlWorkSheet.Cells[1, 2] = textBox5.Text; xlWorkSheet.Cells[1, 3] = textBox2.Text; xlWorkSheet.Cells[1, 4]

目前,我必须指定要添加值的单元格。我喜欢以某种方式递增,比如说,无论用户点击addtofile按钮多少次,它都应该递增前面的模式。 我有:

        xlWorkSheet.Cells[1, 1] = comboBox2.Text;
        xlWorkSheet.Cells[1, 2] = textBox5.Text;
        xlWorkSheet.Cells[1, 3] = textBox2.Text;
        xlWorkSheet.Cells[1, 4] = comboBox3.Text;
        xlWorkSheet.Cells[1, 5] = textBox3.Text;
        xlWorkSheet.Cells[1, 6] = comboBox1.Text;
单击“添加到xls文件”按钮后,如何使其现在遵循此模式并保存到文件,而不必将其写入代码:

        xlWorkSheet.Cells[2, 1] = comboBox2.Text;
        xlWorkSheet.Cells[2, 2] = textBox5.Text;
        xlWorkSheet.Cells[2, 3] = textBox2.Text;
        xlWorkSheet.Cells[2, 4] = comboBox3.Text;
        xlWorkSheet.Cells[2, 5] = textBox3.Text;
        xlWorkSheet.Cells[2, 6] = comboBox1.Text;

我并不是每次都能复制粘贴,那太单调了。欢迎所有答案和意见。提前感谢

您可以使用该属性

public int IndexProp {get; set;}

public void AddToExcelBtn_Click(object sender, EventArgs e) 
{
    //... some other code

    Index +=1;
    xlWorkSheet.Cells[IndexProp , 1] = comboBox2.Text;
    xlWorkSheet.Cells[IndexProp , 2] = textBox5.Text;
    xlWorkSheet.Cells[IndexProp , 3] = textBox2.Text;
    xlWorkSheet.Cells[IndexProp , 4] = comboBox3.Text;
    xlWorkSheet.Cells[IndexProp , 5] = textBox3.Text;
    xlWorkSheet.Cells[IndexProp , 6] = comboBox1.Text;
}

您可以使用属性

public int IndexProp {get; set;}

public void AddToExcelBtn_Click(object sender, EventArgs e) 
{
    //... some other code

    Index +=1;
    xlWorkSheet.Cells[IndexProp , 1] = comboBox2.Text;
    xlWorkSheet.Cells[IndexProp , 2] = textBox5.Text;
    xlWorkSheet.Cells[IndexProp , 3] = textBox2.Text;
    xlWorkSheet.Cells[IndexProp , 4] = comboBox3.Text;
    xlWorkSheet.Cells[IndexProp , 5] = textBox3.Text;
    xlWorkSheet.Cells[IndexProp , 6] = comboBox1.Text;
}

这是基于前面的答案,但更易于查看,并且会在文件打开时重置索引。如果每个组合或文本框都有一个按钮,则需要添加更多的标识符

public static int indexProp = 0;

public void OpenExcelFile(string path){
    //Open new file here
    indexProp = 0; //reset value as needed
}

public void AddToExcelBtn_Click(object sender, EventArgs e) 
{
//... some other code

indexProp +=1;
xlWorkSheet.Cells[indexProp , 1] = comboBox2.Text;
xlWorkSheet.Cells[indexProp , 2] = textBox5.Text;
xlWorkSheet.Cells[indexProp , 3] = textBox2.Text;
xlWorkSheet.Cells[indexProp , 4] = comboBox3.Text;
xlWorkSheet.Cells[indexProp , 5] = textBox3.Text;
xlWorkSheet.Cells[indexProp , 6] = comboBox1.Text;

}

这是基于前面的答案,但更易于查看,并且会在文件打开时重置索引。如果每个组合或文本框都有一个按钮,则需要添加更多的标识符

public static int indexProp = 0;

public void OpenExcelFile(string path){
    //Open new file here
    indexProp = 0; //reset value as needed
}

public void AddToExcelBtn_Click(object sender, EventArgs e) 
{
//... some other code

indexProp +=1;
xlWorkSheet.Cells[indexProp , 1] = comboBox2.Text;
xlWorkSheet.Cells[indexProp , 2] = textBox5.Text;
xlWorkSheet.Cells[indexProp , 3] = textBox2.Text;
xlWorkSheet.Cells[indexProp , 4] = comboBox3.Text;
xlWorkSheet.Cells[indexProp , 5] = textBox3.Text;
xlWorkSheet.Cells[indexProp , 6] = comboBox1.Text;

}

您不必打开工作簿来写入。有一些可用的技术,如OpenXML和ADO.NET,可以将其视为数据库并处理信息。OpenXML有一个陡峭的学习曲线,所以我会尝试ADO.NET,如果它能在您的网络上工作的话

Interop打开文件,您必须使用单元格或外部文本文件来检索编号

另一方面,我假设您是在幕后谈论添加数据的VBA。如果追加数据,只需从底部开始即可

lastRow = valWkSht.Range("B65535").End(xlUp).Row

您不必打开工作簿来写入它。有一些可用的技术,如OpenXML和ADO.NET,可以将其视为数据库并处理信息。OpenXML有一个陡峭的学习曲线,所以我会尝试ADO.NET,如果它能在您的网络上工作的话

Interop打开文件,您必须使用单元格或外部文本文件来检索编号

另一方面,我假设您是在幕后谈论添加数据的VBA。如果追加数据,只需从底部开始即可

lastRow = valWkSht.Range("B65535").End(xlUp).Row


您是否尝试过创建一个静态变量,当按下“添加到xls文件”按钮时,该变量将在新excel文件加载和增量时重置?静态int i=1;public void button_click(object sender,EventArgs e){xlsheet.Cells[i,1]=comboBox2.Text;i++;}@viperschiller我不确定我是否明白你的意思看起来@mybirthname的答案与我想说的类似。不过,我会在更改excel文件时添加一个重置。@Viperschiller的问题是,每次我使用yor解决方案递增时,单元格都会移动数据。假设我从单元格A1开始(也就是combox2值)。以下数据将进入B2(文本框5)然后进入C3(文本框2)等等。您是否尝试过创建一个静态变量,当按下“添加到xls文件”按钮时,该变量将在新excel文件加载和增量时重置?静态int i=1;public void button_click(object sender,EventArgs e){xlsheet.Cells[i,1]=comboBox2.Text;i++;}@viperschiller我不确定我是否明白你的意思看起来@mybirthname的答案与我想说的类似。不过,我会在更改excel文件时添加一个重置。@Viperschiller的问题是,每次我使用yor解决方案递增时,单元格都会移动数据。假设我从单元格A1开始(也就是combox2值)。下面的数据进入B2(textBox5),然后进入C3(textBox2)等等。我尝试了一下,但得到了以下结果:
来自HRESULT的异常:0x800A03EC
@Jevon Use debug,问题是什么,我不知道异常是什么意思
如果您希望属性的默认值为1->则在mscorlib.dll中发生“System.Runtime.InteropServices.COMException”类型的未经处理的异常;我想你用的是C#6。0@JevonIndex是增加索引的属性。我尝试了它,但得到以下结果:
来自HRESULT的异常:0x800A03EC
@Jevon Use debug,问题是什么,我不知道异常是什么意思
如果您希望属性的默认值为1->则在mscorlib.dll中发生“System.Runtime.InteropServices.COMException”类型的未经处理的异常;我想你用的是C#6。0@Jevon索引是增加索引的属性。如果我想打开文件并保存一次,在将来添加数据时,我只需写入而不打开。如果你想写入文件,你必须打开它。如果您愿意,您可以包装一个打开的文件并将可见性设置为false,然后确定上次写入的位置,并使用以下位置作为indexProp的起点。如果它重置了我的索引,是否会覆盖文件的原始内容?如果您先读它以确定上次写入的位置,则不会。而(xlsheetwork.Cells[indexProp,1]!=String.Empty&&indexProp