C# 通过MVC4使用文本框更新Excel单元格

C# 通过MVC4使用文本框更新Excel单元格,c#,asp.net-mvc,excel,asp.net-mvc-4,C#,Asp.net Mvc,Excel,Asp.net Mvc 4,昨天我又开始学习编程了。作为一项任务,我制作了一个API,在这里可以创建Excel文件,可以填写一个文本框,来自这个文本框的文本将填充Excel中的一个单元格。下面是我为创建excel文件而做的作业(问题在代码后面) 公共类HomeController:控制器 { 公共行动结果索引() { 返回视图(); } public ActionResult DownloadExcel(字符串字段,int id=0) { var bla=字段; List obj=新列表(); obj=记录信息(字段);

昨天我又开始学习编程了。作为一项任务,我制作了一个API,在这里可以创建Excel文件,可以填写一个文本框,来自这个文本框的文本将填充Excel中的一个单元格。下面是我为创建excel文件而做的作业(问题在代码后面)

公共类HomeController:控制器
{
公共行动结果索引()
{
返回视图();
}
public ActionResult DownloadExcel(字符串字段,int id=0)
{
var bla=字段;
List obj=新列表();
obj=记录信息(字段);
StringBuilder str=新的StringBuilder();
str.Append(“”);
str.Append(“”);
str.Append(“字段名”);
str.Append(“”);
foreach(在obj中记录val)
{
str.Append(“”);
str.Append(“+val.Fieldname.ToString()+”);
str.Append(“”);
}
str.Append(“”);
HttpContext.Response.AddHeader(“内容处置”,“附件;文件名=信息”+DateTime.Now.Year.ToString()+”.xls”);
this.Response.ContentType=“应用程序/vnd.ms excel”;
byte[]temp=System.Text.Encoding.UTF8.GetBytes(str.ToString());
返回文件(temp,“application/vnd.ms excel”);
}
公共列表记录信息(string fieldname=“test”)
{
List recordobj=新列表();
添加(新记录{Fieldname=Fieldname});
返回记录对象;
}
}
现在我的问题是。是否可以通过C#修改Excel中的字段,是否可以使用文本框修改特定单元格,并且数据将在单击时更改(例如,我想将单元格D7从1调整为2,因此我转到表格,在文本框中填写2,然后按submit,当我打开Excel时,特定单元格将显示新的数字)。我搜索了一下,但找不到答案。一个链接到如何可以使它是感激的


提前谢谢

我建议您切换到另一种方法,使用“成熟”库创建excel文件。EPPlus是免费的,提供了强大的功能,并且非常易于使用


看看例子:

晚了一点,但我不久前回答了自己的问题。 对于那些感兴趣的人,下面是我如何解决问题的代码

public class ExcelModel
{
    Application excelApp;

    string newValue;

    public ExcelModel(string newValue)
    {
        excelApp = new Application();
        this.newValue = newValue;
    }

    public void openExcelSheet(string fileName)
    {
        Workbook workbook = excelApp.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

        Worksheet sheet = (Worksheet)workbook.Worksheets.get_Item(2);

        double oldValue = sheet.get_Range("D6").get_Value();



        sheet.Cells[6, 4] = newValue;

        workbook.SaveAs("\\Users\\user1\\Downloads\\text3.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

        workbook.Close();
        excelApp.Visible = true;
        Workbook newWorkbook = excelApp.Workbooks.Open("\\Users\\user1\\Downloads\\text3.xlsx");
    }

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult UpdateExcel(string field, int id = 0)
    {
        ExcelModel model = new ExcelModel(field);
        string file = "\\Users\\user1\\Downloads\\Testdocument.xlsx";
        model.openExcelSheet(file);

        return RedirectToAction("Index");


    }

    public List<Record> RecordInfo(string fieldname = "test")
    {
        List<Record> Recordobj = new List<Record>();
        Recordobj.Add(new Record { Fieldname = fieldname });
        return Recordobj;
    }
}
公共类模型
{
应用程序;
字符串newValue;
公共模型(字符串newValue)
{
excelApp=新应用程序();
this.newValue=newValue;
}
公共void openExcelSheet(字符串文件名)
{
工作簿工作簿=excelApp.Workbooks.Open(文件名、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少、类型.缺少);
工作表=(工作表)工作簿。工作表。获取项目(2);
double oldValue=sheet.get_Range(“D6”).get_Value();
单元格[6,4]=新值;
工作簿.SaveAs(“\\Users\\user1\\Downloads\\text3.xlsx”,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
workbook.Close();
excelApp.Visible=true;
工作簿newWorkbook=excelApp.Workbooks.Open(“\\Users\\user1\\Downloads\\text3.xlsx”);
}
公共类HomeController:控制器
{
公共行动结果索引()
{
返回视图();
}
public ActionResult UpdateExcel(字符串字段,int id=0)
{
ExcelModel模型=新的ExcelModel(字段);
字符串文件=“\\Users\\user1\\Downloads\\Testdocument.xlsx”;
model.openExcelSheet(文件);
返回操作(“索引”);
}
公共列表记录信息(string fieldname=“test”)
{
List Recordobj=新列表();
添加(新记录{Fieldname=Fieldname});
返回记录对象;
}
}

我知道我忘了提到它是关于现有Excel工作表的。谢谢,我下次创建Excel文件时会尝试。但是EPPlus是否也可以用于现有Excel文件,我想通过带有textbox+submit的网页更改某个单元格
public class ExcelModel
{
    Application excelApp;

    string newValue;

    public ExcelModel(string newValue)
    {
        excelApp = new Application();
        this.newValue = newValue;
    }

    public void openExcelSheet(string fileName)
    {
        Workbook workbook = excelApp.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

        Worksheet sheet = (Worksheet)workbook.Worksheets.get_Item(2);

        double oldValue = sheet.get_Range("D6").get_Value();



        sheet.Cells[6, 4] = newValue;

        workbook.SaveAs("\\Users\\user1\\Downloads\\text3.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

        workbook.Close();
        excelApp.Visible = true;
        Workbook newWorkbook = excelApp.Workbooks.Open("\\Users\\user1\\Downloads\\text3.xlsx");
    }

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult UpdateExcel(string field, int id = 0)
    {
        ExcelModel model = new ExcelModel(field);
        string file = "\\Users\\user1\\Downloads\\Testdocument.xlsx";
        model.openExcelSheet(file);

        return RedirectToAction("Index");


    }

    public List<Record> RecordInfo(string fieldname = "test")
    {
        List<Record> Recordobj = new List<Record>();
        Recordobj.Add(new Record { Fieldname = fieldname });
        return Recordobj;
    }
}