11

我需要创建一个非常大的 Excel 文件,但一个工作表中的 excel 文件最多可以包含 65k 行。所以,我想把我所有的信息分成几个动态的工作表。这是我的大概代码

 //------------------Create Excel App--------------------
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(numberOfLetters);

     foreach (string letter in letters)
     {
      xlWorkSheet.Cells[rowIndex, 1] = letter; 
      rowIndex++;
     }

xlWorkBook.SaveAs(pathXL, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

如何在我的 foreach 循环中添加新工作表并使用某些条件为工作表命名(用户可以在列表页面底部的 Excel 中看到该名称)?

有的这样

    foreach (string letter in letters)
    {
      if (letter == SOME)
      {
        AddNewWorksheet and give name SOME
      }
        xlWorkSheet.Cells[rowIndex, 1] = letter; 
        rowIndex++;
    }

最后如何保存所有工作表?

4

4 回答 4

15

要将新工作表添加到工作簿,请使用以下代码:

var xlSheets = xlWorkBook.Sheets as Excel.Sheets;
var xlNewSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
xlNewSheet.Name = "newsheet";

// Uncomment a line below if you want the inserted sheet to be the last one
//xlWorkBook.Sheets.Move(After: xlWorkBook.Sheets.Count);

保存工作簿调用Save()方法:

xlWorkBook.Save();
于 2013-05-23T04:49:37.723 回答
4

这是 MSDN 中给出的正确代码。

Excel.Worksheet newWorksheet;
newWorksheet = (Excel.Worksheet)Globals.ThisWorkbook.Worksheets.Add(
    missing, missing, missing, missing);

欲了解更多信息,请点击链接

于 2013-05-23T05:12:51.573 回答
4

一般来说,当您想创建新工作表时,只需执行以下操作:

var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add();

知道您已经创建了如下工作簿:

var workbook = excel.Workbooks.Add(Type.Missing);
于 2017-06-25T11:58:57.880 回答
1

使用 .xls 限制为 65,000 条记录,但如果“允许”使用 .xlsx 超越 .xls / 2003 并进入 2007 及更高版本,则应该有更多的行。

旁注,与您的问题无关,但前段时间我使用 RDLC 和工作表名称导出到 excel 问题我使用 NPOI 库重命名,从那时起我开始使用 NPOI 更多它是免费/开源并且非常强大(再次从 Java POI 移植到 .net NPOI)虽然我说这并不是你问题的一部分,但如果它有这样做的例子我不会感到惊讶(不,我不为他们工作) http:/ /npoi.codeplex.com/

这是我为重命名工作表而编写的代码(最终用另一个内存流重新创建工作表

------------------------------------------------------------
var excelHelper = new ExcelHelper(bytes);
bytes = excelHelper.RenameTabs("Program Overview", "Go Green Plan", "Milestones", "MAT and EOC", "Annual Financials", "Risk Log", "Risk & Opportunity Log", "RAIL", "Meeting Minutes");

Response.BinaryWrite(bytes);
Response.End();
------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NPOI.HSSF.UserModel;


namespace Company.Project.Core.Tools
{
    public class ExcelHelper
    {
        private byte[] _ExcelFile;

        public ExcelHelper(byte[] excelFile)
        {
            _ExcelFile = excelFile;
        }

        public byte[] RenameTabs(params string[] tabNames)
        {
            byte[] bytes = null;

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(_ExcelFile, 0, _ExcelFile.Length);
                var workBook = new HSSFWorkbook(ms, true);

                if (tabNames != null)
                {
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        for (int i = 0; i < tabNames.Length; i++)
                        {
                            workBook.SetSheetName(i, tabNames[i]);
                        }
                        workBook.Write(memoryStream);
                        bytes = memoryStream.ToArray();
                    }
                }
            }
            _ExcelFile = bytes;
            return bytes;
        }
    }
于 2013-05-23T04:35:32.830 回答