Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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# 使用占位符从asp.net mvc中使用EPPlus库上载的excel文件生成字符串_C#_Asp.net_Asp.net Mvc_Epplus - Fatal编程技术网

C# 使用占位符从asp.net mvc中使用EPPlus库上载的excel文件生成字符串

C# 使用占位符从asp.net mvc中使用EPPlus库上载的excel文件生成字符串,c#,asp.net,asp.net-mvc,epplus,C#,Asp.net,Asp.net Mvc,Epplus,我正在编写一个应用程序,用户可以上传一个excel文件,其中包含我不知道的列数的联系信息。一张工作表可以有尽可能多的列和行。我试图实现的是,用户可以通过使用基于零的索引作为列的占位符来构建消息,从而向工作表中的每个联系人发送消息 用户将像这样构建他的消息,{code>亲爱的{0}{1},您的年龄是{2},您的电子邮件是{3}其中{0}是第一列的标题,{1}是第二列的标题,诸如此类。这会将消息输出为亲爱的Jon Snow,您的年龄是27岁,电子邮件是jsnow@winterfell.com。我想对

我正在编写一个应用程序,用户可以上传一个excel文件,其中包含我不知道的列数的联系信息。一张工作表可以有尽可能多的列和行。我试图实现的是,用户可以通过使用基于零的索引作为列的占位符来构建消息,从而向工作表中的每个联系人发送消息

用户将像这样构建他的消息,{code>亲爱的{0}{1},您的年龄是{2},您的电子邮件是{3}其中{0}是第一列的标题,{1}是第二列的标题,诸如此类。这会将消息输出为亲爱的Jon Snow,您的年龄是27岁,电子邮件是jsnow@winterfell.com。我想对工作表中的每一行都这样做。我正在使用ePlus解析excel工作表。这是我尝试过的

static void Main(string[] args)
{
    var path = "C:\\Users\\RIDWAN\\Desktop\\ExcelFile.xlsx";
    FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);            
    using (var package = new ExcelPackage(fs))
    {
        var currentSheet = package.Workbook.Worksheets;//get the work sheet
        var workSheet = currentSheet.First();//get the first sheet
        var noOfCol = workSheet.Dimension.End.Column; //get the no of col in the active sheet
        var noOfRow = workSheet.Dimension.End.Row; /get the no of row in the active sheet
        var placeholder = "{FirstName}";
        for (int i = 2; i <= noOfRow; i++)
        {
            for (int j = 1; j <= noOfCol; j++)
            {
                var message = String.Format("Dear {0} {1}, your age is {2} and your email is {3}", workSheet.GetValue(i, j));
                Console.Write(message);
            }
        }
        Console.ReadLine();
    }

}
static void Main(字符串[]args)
{
var path=“C:\\Users\\RIDWAN\\Desktop\\ExcelFile.xlsx”;
FileStream fs=newfilestream(路径,FileMode.Open,FileAccess.Read);
使用(var包=新的ExcelPackage(fs))
{
var currentSheet=package.Workbook.Worksheets;//获取工作表
var sheet=currentSheet.First();//获取第一张工作表
var noOfCol=workSheet.Dimension.End.Column;//获取活动工作表中的列号
var noOfRow=workSheet.Dimension.End.Row;/获取活动工作表中的行数
var占位符=“{FirstName}”;

for(int i=2;i似乎您只需要一个
for
循环,因为col的数量是已知的-它的行是这里的变量。只需执行以下操作:

using (var package = new ExcelPackage(fs))
{
    var currentSheet = package.Workbook.Worksheets;//get the work sheet
    var workSheet = currentSheet.First();//get the first sheet
    var noOfCol = workSheet.Dimension.End.Column; //get the no of col in the active sheet
    var noOfRow = workSheet.Dimension.End.Row; // get the no of row in the active sheet
    var placeholder = "{FirstName}";
    for (int i = 2; i <= noOfRow; i++)
    {
        var vals = workSheet.Cells[i, 1, i, noOfCol].Select(c => c.Value).ToArray();
        var message = String.Format("Dear {0} {1}, your age is {2} and your email is {3}", vals);
        Console.WriteLine(message);
    }
}

一个让你的生活更轻松的建议-在电子表格中使用命名范围。这将比硬编码行数和列数更容易。它将允许你修改电子表格并移动范围,而无需返回并更改代码中的数字。我担心这将如何帮助我实现我的目标,因为我不是唯一的公关向他们发送模板时,他们将使用他们喜欢的任何列标题上载一个列或行数未知的文件。在这种情况下,我的建议不会有多大帮助。但是,您如何知道要在哪些列中插入哪些值?请参考我的问题。他们所需要做的就是通过引用其列来撰写消息使用从零开始的索引作为占位符命名,我将强制要求第一行必须是列名,因此我将在工作表中循环,从第二行到最后一行,从第一列到最后一列。请参阅接受的答案。亲爱的厄尼,我感谢answet。但是,列数为uknown,这就是我使用两个“for循环”的原因。我如何将其合并到答案中。@ibnhamza您的代码已经使用行
var noOfCol=workSheet.Dimension.End.Column;
.Epplus将根据工作表中哪些列具有实际内容(而不是为空)来处理该部分。
Dear Jon Snow, your age is 27 and your email is jsnow@winderfell.com
Dear Arya Stark, your age is 18 and your email is aryastark@winterfell.com
Dear Eddard Stark, your age is 50 and your email is lordeddard@winterfell.com