C# 使用C中的ExcelLibrary创建具有多个工作表的多个excels#

C# 使用C中的ExcelLibrary创建具有多个工作表的多个excels#,c#,excel,model-view-controller,excellibrary,C#,Excel,Model View Controller,Excellibrary,我想用多个excel文件导出多张图纸中的数据。正如您在我的图像中所看到的,我希望在ID更改时生成工作表,当ModalityId更改时,我希望创建新的excel 为此,我编写了如下代码: List<string> lstFile = new List<string>(); if (dtAltTag != null && dtAltTag.Rows.Count > 0) { string filePath = string.Empty;

我想用多个excel文件导出多张图纸中的数据。正如您在我的图像中所看到的,我希望在
ID
更改时生成工作表,当
ModalityId
更改时,我希望创建新的excel

为此,我编写了如下代码:

List<string> lstFile = new List<string>();
if (dtAltTag != null && dtAltTag.Rows.Count > 0)
{
    string filePath = string.Empty;
    string fileName = "";

    Excel.Workbook workBook = new Excel.Workbook();
    var workSheet = new Excel.Worksheet(fileName);

    if (dtAltTag.Rows[0]["OldFormCode"] != null && dtAltTag.Rows[0]["OldFormCode"].ToString() != "")
    {
        fileName = dtAltTag.Rows[0]["OldFormCode"].ToString();
    }
    else
    {
        fileName = dtAltTag.Rows[0]["Code"].ToString();
    }
    workSheet.Name = fileName;
    AddValue(0, workSheet, dtAltTag); // function is used to add the value in the sheet
    workBook.Worksheets.Add(workSheet);

    //data working
    for (int i = 0; i < dtAltTag.Rows.Count; i++)
    {
        //for modality changes and first entery 
        //if (i == 0 || dtAltTag.Rows[i]["ModalityId"] != dtAltTag.Rows[i - 1]["ModalityId"])
        //{
        //if form changes then it should be in other sheet
        if (i != 0 && dtAltTag.Rows[i]["ID"].ToString() != dtAltTag.Rows[i - 1]["ID"].ToString())
        {
            if (dtAltTag.Rows[i]["OldFormCode"] != null && dtAltTag.Rows[i]["OldFormCode"].ToString() != "")
            {
                fileName = dtAltTag.Rows[i]["OldFormCode"].ToString();
            }
            else
            {
                fileName = dtAltTag.Rows[i]["Code"].ToString();
            }
            var workSheet1 = new Excel.Worksheet(fileName);

            AddValue(i, workSheet1, dtAltTag);
        }
        else
        {

        }
    }

    filePath = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["ExcelFilesFilePath"]) + "Allitem";
    if (!File.Exists(filePath))
        Directory.CreateDirectory(filePath);
    filePath = filePath + "\\" + fileName + "_" + DateTime.Now.ToString("MM_dd_yyy_HH_mm_ss") + ".xls";
    workBook.Save(filePath);
    lstFile.Add(filePath);
}
return lstFile;
List lstFile=new List();
如果(dtAltTag!=null&&dtAltTag.Rows.Count>0)
{
string filePath=string.Empty;
字符串fileName=“”;
Excel.Workbook工作簿=新建Excel.Workbook();
var工作表=新的Excel.工作表(文件名);
if(dtAltTag.Rows[0][“OldFormCode”]!=null&&dtAltTag.Rows[0][“OldFormCode”]。ToString()!=“”)
{
fileName=dtAltTag.Rows[0][“OldFormCode”].ToString();
}
其他的
{
fileName=dtAltTag.Rows[0][“Code”].ToString();
}
工作表名称=文件名;
AddValue(0,工作表,dtAltTag);//函数用于在工作表中添加值
工作簿。工作表。添加(工作表);
//数据处理
对于(int i=0;i
当id更改时,我会附加新的头,但在这之后,我想继续导出数据,直到id更改无法检测到如何执行此操作为止? 如果我在其他情况下继续添加值,如何获取当前工作表

我希望你清楚我想做的事


提前感谢!

否则您就不能这样做:

  • 循环浏览数据
  • 如果
    ModalityId
    不同,则保存当前文件并创建一个新文件(将其分配回当前文件变量)
  • 如果
    ID
    不同,则创建一个新工作表(将其附加到当前文件并将其分配回当前工作表变量)
  • 将数据添加到当前工作表
  • 在循环外部,保存当前(和最后一个)文件
这可能是它的伪代码:

var currentFile = new ExcelFile();
var currentSheet = currentFile.AppendSheet(rows[0].SheetName);
string lastFileName;

for(int i = 0; i < rows.Count; i++)
{
    // Adds new file if necessary
    if(i != 0 && rows[i].ModalityId != rows[i - 1].ModalityId)
    {
        currentFile.Save(rows[i - 1].FileName);
        currentFile = new ExcelFile();
    }
    // Adds new sheet if necessary
    if(i != 0 && rows[i].ID != rows[i - 1].ID)
    {
        currentSheet = currentFile.AppendSheet(rows[i].SheetName);
    }

    InsertData(currentSheet, rows[i]);

    lastFileName = rows[i].FileName;
}

currentFile.Save(lastFileName);
var currentFile=new ExcelFile();
var currentSheet=currentFile.AppendSheet(行[0].SheetName);
字符串lastFileName;
for(int i=0;i
参考“Rafalon”代码,我对代码做了一些更改,代码运行良好! 谢谢大家!

我的代码如下:

 var filePath = "";
            string fileName = "";

            if (dtAltTag.Rows[0]["OldFormCode"] != null && dtAltTag.Rows[0]["OldFormCode"].ToString() != "")
            {
                fileName = dtAltTag.Rows[0]["OldFormCode"].ToString();
            }
            else
            {
                fileName = dtAltTag.Rows[0]["Code"].ToString();
            }

            int Row = 0;
            var currentFile = new Excel.Workbook();
            var currentSheet = new Excel.Worksheet(fileName);
            currentFile.Worksheets.Add(currentSheet);

            List<string> lstFile = new List<string>();
            if (dtAltTag != null && dtAltTag.Rows.Count > 0)
            {


                for (int i = 0; i < dtAltTag.Rows.Count; i++)
                {

                    if (i == 0)
                    {
                        AddValue(i, currentSheet, dtAltTag, Row);
                    }
                    else
                    {
                        if (dtAltTag.Rows[i]["ModalityId"].ToString() != dtAltTag.Rows[i - 1]["ModalityId"].ToString())
                        {
                            filePath = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["ExcelFilesFilePath"]) + "Allitem";
                            if (!File.Exists(filePath))
                                Directory.CreateDirectory(filePath);
                            filePath = filePath + "\\" + fileName + "_" + DateTime.Now.ToString("MM_dd_yyy_HH_mm_ss") + ".xls";
                            lstFile.Add(filePath);
                            currentFile.Save(filePath);
                            currentFile = new Excel.Workbook();

                        }
                        if (dtAltTag.Rows[i]["ID"].ToString() != dtAltTag.Rows[i - 1]["ID"].ToString())
                        {

                            if (dtAltTag.Rows[i]["OldFormCode"] != null && dtAltTag.Rows[i]["OldFormCode"].ToString() != "")
                            {
                                fileName = dtAltTag.Rows[i]["OldFormCode"].ToString();
                            }
                            else
                            {
                                fileName = dtAltTag.Rows[i]["Code"].ToString();
                            }
                            currentSheet = new Excel.Worksheet(fileName);
                            currentFile.Worksheets.Add(currentSheet);
                            Row = 0;

                        }

                        AddValue(i, currentSheet, dtAltTag, Row);


                    }
                    Row++;

                }


                filePath = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["ExcelFilesFilePath"]) + "Allitem";
                if (!File.Exists(filePath))
                    Directory.CreateDirectory(filePath);
                filePath = filePath + "\\" + fileName + "_" + DateTime.Now.ToString("MM_dd_yyy_HH_mm_ss") + ".xls";           
                currentFile.Save(filePath);
                lstFile.Add(filePath);

            }
var filePath=”“;
字符串fileName=“”;
if(dtAltTag.Rows[0][“OldFormCode”]!=null&&dtAltTag.Rows[0][“OldFormCode”]。ToString()!=“”)
{
fileName=dtAltTag.Rows[0][“OldFormCode”].ToString();
}
其他的
{
fileName=dtAltTag.Rows[0][“Code”].ToString();
}
int行=0;
var currentFile=new Excel.Workbook();
var currentSheet=新的Excel.Worksheet(文件名);
currentFile.Worksheets.Add(currentSheet);
List lstFile=新列表();
如果(dtAltTag!=null&&dtAltTag.Rows.Count>0)
{
对于(int i=0;iprivate void AddValue(int i, Excel.Worksheet workSheet, DataTable dtAltTag, int Row)
        {
            //Header Working starts here
            string[] columName = new string[] { "column1", "column2", "column2", "column2", "column2" }; //add header as per you requirement
            if (Row == 0)
            {
                for (int c = 0; c < columName.Length; c++)
                {
                    workSheet.Cells[0, c] = new Excel.Cell(columName[c]);
                }
            }

            //add data
            for (int c = 0; c < columName.Length; c++)
            {
                workSheet.Cells[Row + 1, c] = new Excel.Cell(dtAltTag.Rows[i].ItemArray[c].ToString());            
            }


        }