よくある質問
Workbook.CalculateFormulaでSystem.StackOverFlowExceptionを修正する方法
ユーザーは、Workbook.CalculateFormulaメソッドでSystem.StackOverFlowExceptionに遭遇することがあります。この例外は通常、IISのデフォルトのスタックサイズが小さすぎる(265kのみ)ために発生します。スタックサイズを増やした別のスレッドを作成し、それに関連するコードを移動することでこのエラーを修正できます。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
private HttpPostedFileBase postedFile; | |
[HttpPost] | |
public ActionResult Index(HttpPostedFileBase file, string mode) | |
{ | |
this.postedFile = file; | |
Thread newThread = new Thread(Calculate, 1048576); | |
newThread.Start(); | |
newThread.Join(); | |
return View(); | |
} | |
private void Calculate() | |
{ | |
if (postedFile != null && postedFile.ContentLength > 0) | |
{ | |
var wbkMain = new Workbook(postedFile.InputStream); | |
wbkMain.CalculateFormula(); | |
} | |
} |
ExcelをPDFに変換する際の線の太さの問題
ExcelファイルをPDFに変換すると、出力されるPDFの線の太さが異なることがあります。この問題はAspose.Cellsによるものではなく、Adobe Readerの設定の"スムースラインアート"と"細い線を強調する"のチェックによるものです。これらのオプションをオフにすると、PDFが正常に表示されます。
“スムースラインアート"と"細い線を強調する"のチェックを外すと、線の太さが異なります。次の手順を参照してください:
- “編集"に移動
- “設定"を選択
- “ページ表示"カテゴリで"スムースラインアート"と"細い線を強調する"をチェック
“スムースラインアート"と"細い線を強調する"のチェックを外すと、線の太さが同じになります。次の手順に従ってください:
- “編集"に移動
- “設定"を選択
- “ページ表示"カテゴリで"スムースラインアート"と"細い線を強調する"のチェックを外す
大規模なスプレッドシートを読み込む際のSystem.OutOfMemoryExceptionの修正方法
大規模なスプレッドシートを読み込む際にWorkbookコンストラクタがSystem.OutOfMemoryExceptionをスローする可能性があります。この例外は、利用可能なメモリがスプレッドシートを完全に読み込むのに十分でないことを示唆しています。したがって、メモリ設定を有効にしてスプレッドシートを読み込む必要があります。
Aspose.Cells APIは、大規模なスプレッドシートを効率的に読み込むためのメモリ設定を提供しています。以下に示すように、これらのオプションは、大量のデータセットを含む大規模なスプレッドシートを効率的にWorkbookオブジェクトに読み込むのに役立ちます。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Specify the LoadOptions | |
LoadOptions options = new LoadOptions(); | |
// Set the memory preferences | |
options.MemorySetting = MemorySetting.MemoryPreference; | |
// Load the Big Excel file having large Data set in it | |
Workbook book = new Workbook(dataDir + "sample.xlsx", options); | |
Console.WriteLine("File has been loaded successfully"); |
特定のワークブックに必要なスタックサイズを決定する
Aspose.Cellsの数式計算エンジンを強化していますが、ほとんどの場合、より小さなスタックサイズを指定せずに与えられたテンプレートファイルのすべての数式を正常に計算できるはずです。ただし、Workbook.CalculateFormulaメソッドでStackOverFlowExceptionが発生することがあります。この問題に対処するために、ユーザー向けに数式計算をトラッキングする新しいAPIを提供しています。“AbstractCalculationMonitor"というクラスを追加し、CalculationOptions.CalculationMonitorプロパティを提供しています。
ユーザーはAPIを使用してスタックサイズを自分でトレースすることができます。ただし、すべてのセルのスタックを確認すると、パフォーマンスが著しく低下します。参考のためにサンプルコードセグメントをご覧ください:
public class MyCalculationMonitor : AbstractCalculationMonitor | |
{ | |
public override void BeforeCalculate(int sheetIndex, int rowIndex, int colIndex) | |
{ | |
if(new StackTrace(false).FrameCount > 2000) | |
{ | |
throw new Exception("Stop the formula calculation because risk of StackOverflowException"); | |
} | |
} | |
} |