दुर्भाग्य से, वहाँ कोई सीधा तरीका है। बिल्कुल यकीन नहीं है कि क्यों ईपीप्लस के डेवलपर्स ExcelTable.Address
संपत्ति केवल तैयार करने का विकल्प चुनते हैं। तो सबसे स्पष्ट चयन एक नई टेबल बनाना होगा, सभी गुणों की प्रतिलिपि बनाना (माना जाता है कि आप उन सभी को जानते हैं जिन्हें आवश्यक हैं) और पुराने को हटा दें। बहुत आदर्श नहीं है क्योंकि आप कुछ याद कर सकते हैं।
लेकिन मैं दो अन्य दूसरों को देखता हूं - अगली सुंदर या तो बेहतर तो कॉपी/हटाएं। इसलिए जैसे एक मेज मान लें:
विकल्प 1 आप EPPlus स्रोत कोड कांटा और संपत्ति को पढ़ने की जरूरत/लिखने बना सकता है। internal
कीवर्ड को हटाने के द्वारा
public ExcelAddressBase Address
{
get
{
return _address;
}
internal set //REMOVE internal KEYWORD
{
_address = value;
SetXmlNodeString("@ref",value.Address);
WriteAutoFilter(ShowTotal);
}
}
: आप बदलकर फ़ाइल ExcelTable.cs
में ऐसा होगा। लेकिन निश्चित रूप से आपको सावधान रहना होगा ताकि रास्ते में कुछ और तोड़ न सके।
var fileInfo = new FileInfo(@"c:\temp\Expand_Table.xlsx");
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.First();
//Added 11th data row assuming the table is from A1 to C11 (Header row + 10 data rows)
worksheet.Cells["A12"].Value = 10;
worksheet.Cells["B12"].Value = 100;
worksheet.Cells["C12"].Value = Path.GetRandomFileName();
var tbl = worksheet.Tables["TestTable1"];
var oldaddy = tbl.Address;
var newaddy = new ExcelAddressBase(oldaddy.Start.Row, oldaddy.Start.Column, oldaddy.End.Row + 1, oldaddy.End.Column);
tbl.Address = newaddy;
pck.Save();
}
विकल्प 2 सुरक्षित विकल्प लेकिन सबसे "गंदे" एक स्ट्रिंग XML पर की जगह का उपयोग करके होगा: इस के साथ, आप की तरह कुछ कर सकते हैं। हम मान सकते हैं कि पते का केवल एक संदर्भ है क्योंकि, उदाहरण के लिए, ऑटोफिल्टर चालू किया जा सकता है।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="3" name="TestTable1" displayName="TestTable1" ref="A1:C11" totalsRowShown="0">
<autoFilter ref="A1:C11" />
<tableColumns count="3">
<tableColumn id="1" name="Col1" />
<tableColumn id="2" name="Col2" />
<tableColumn id="3" name="Col3" />
</tableColumns>
<tableStyleInfo name="TableStyleMedium2" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0" />
</table>
तो हम एक स्ट्रिंग कर सकते हैं इस तरह की जगह:
var fileInfo = new FileInfo(@"c:\temp\Expand_Table.xlsx");
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.First();
//Added 11th data row assuming the table is from A1 to C11 (Header row + 10 data rows)
worksheet.Cells["A12"].Value = 10;
worksheet.Cells["B12"].Value = 100;
worksheet.Cells["C12"].Value = Path.GetRandomFileName();
var tbl = worksheet.Tables["TestTable1"];
var oldaddy = tbl.Address;
var newaddy = new ExcelAddressBase(oldaddy.Start.Row, oldaddy.Start.Column, oldaddy.End.Row + 1, oldaddy.End.Column);
//Edit the raw XML by searching for all references to the old address
tbl.TableXml.InnerXml = tbl.TableXml.InnerXml.Replace(oldaddy.ToString(), newaddy.ToString());
pck.Save();
}
ईपीप्लस एक्सेल के निर्यात के लिए है, आप वास्तव में क्या चाहते हैं? –
यदि मैं आपके प्रश्न को सही तरीके से समझ रहा हूं, तो मेरा उत्तर एक एक्सेल फ़ाइल को स्मृति में पढ़ेगा और एक पंक्ति जोड़ देगा, फिर फ़ाइल को ओवरराइट करेगा। –