以下のこのコードを使用したテーブル列の数に応じて、短い範囲または長い範囲をマージ解除して再マージしようとしていますが、うまくいかないようです
tableSheet.Cells["C1:J1"].Merge = false;
どんな助けでも大歓迎です。
EPP 4.0.1 を実行していますか? もしそうなら、それは既知の問題です:
https://epplus.codeplex.com/workitem/15134
誰かがプロパティの代わりのセッターを投稿しましたMerge
(ただし、ゲッターはまだ正しくないようです)。代替セッターを ExcelRangeBase.cs に貼り付けて再コンパイルすると、このテスト メソッドが機能し始めました。
[TestMethod]
public void Merge_Unmerge_Cells_Test()
{
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var package = new ExcelPackage(existingFile))
{
var workbook = package.Workbook;
var worksheet = workbook.Worksheets.Add("newsheet");
worksheet.Select("A1:C3");
worksheet.SelectedRange.Merge = true;
worksheet.SelectedRange.Value = "Merged Value";
worksheet.SelectedRange.Merge = false;
package.Save();
}
}
バージョン 3 を実行している場合は動作するはずなので、残りのコードを貼り付けてください。
更新: codeplex リンクからのコード。セットを探してpublic bool Merge
交換してください。
set
{
IsRangeValid("merging");
//SetMerge(value, FirstAddress);
if (!value)
{
if (_worksheet.MergedCells.Contains(FirstAddress))
{
_worksheet.MergedCells.Remove(FirstAddress);
}
else
{
throw (new ArgumentException("Range is not merged"));
}
if (Addresses != null)
{
foreach (var address in Addresses)
{
if (_worksheet.MergedCells.Contains(address.Address))
{
_worksheet.MergedCells.Remove(address.Address);
}
else
{
throw (new ArgumentException("Range is not merged"));
}
}
}
}
else
{
_worksheet.MergedCells.Add(new ExcelAddressBase(FirstAddress), true);
if (Addresses != null)
{
foreach (var address in Addresses)
{
_worksheet.MergedCells.Add(address, true);
//SetMerge(value, address._address);
}
}
}
}