11

非常に大きな Excel ファイルを作成する必要がありますが、1 つのワークシートの Excel ファイルには最大 65,000 行を含めることができます。だから、私はすべての情報を動的にいくつかのワークシートに分割したいと考えています。これは私のおおよそのコードです

 //------------------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 に答える
1

.xls では 65,000 レコードに制限されていますが、 .xls / 2003 を超えて .xlsx で 2007 以降に進むことが「許可」されている場合は、さらに多くの行が必要です。

補足として、あなたの質問とは関係ありませんが、しばらく前に、RDLC と NPOI ライブラリを使用して名前を変更したシート名に関する問題を 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 に答える