比如源文件和目标文件的表格名都是sheet1,怎么在保存的目标文件中还保持表格名为sheet1,或者说用哪个方法可以实现?
@aspose1111
你愿意详细描述一下你的需求吗? 如果是工作表(Worksheet)的名字, 直接打开并重新保存后是不会改变的。
如果是两个文件合并,原文件和目标文件都有相同名字(如 “Sheet1”)的工作表,那么合并后的文件会存在名字为"Sheet1 (2)"的工作表。这个名字改变规则是遵循Excel规范的。
你也可以通过Worksheet.Name属性改变工作表的名字。
我是需要将源文件内容复制到目标文件,使用的Add方法去复制表格名字,但是源文件和目标文件中的表格名字一致,就无法使用Add方法复制,想问下有其他的方法代替吗?直接将目标文件中的表格名覆盖
Aspose.Cells.Worksheet worksheetDest = workbookDest.Worksheets.Add(sheetName);
使用的这句话
@aspose1111
一个Excel文件是不允许存在两个相同名字的工作表。如果你原文件中相同名字的工作表不需要了,你可以调用Workbook.Worksheets.RemoveAt(string name)先删除后再进行其他操作。
我需要还是这个重复的名字不变,然后将源文件的表格内容复制过来
@aspose1111
你可以有两种方式来达到目标。
- 将原worksheet的数据拷贝到目标worksheet的后面,你可以通过范围拷贝实现。请参考以下文档。
2. 直接拷贝worksheet,但是目标worksheet的数据会被覆盖。
样例代码如下:
Workbook dest = new Workbook(filePath + "a.xlsx");
Workbook source = new Workbook(filePath + "b.xlsx");
string sheetName = "Sheet1";
Worksheet destSheet = dest.Worksheets[sheetName];
Worksheet sourceSheet = source.Worksheets[sheetName];
//第一种方式:将内容拷贝到原有内容后面
Range soureRange = sourceSheet.Cells.MaxDisplayRange;
Range destRange = destSheet.Cells.MaxDisplayRange;
Range copyRange = destSheet.Cells.CreateRange(destRange.FirstRow + destRange.RowCount + 1, 0,
soureRange.RowCount, soureRange.ColumnCount);
copyRange.Copy(soureRange);
dest.Save(filePath + @"a_out.xlsx");
//第二种方式:直接拷贝worksheet, 原内容会被覆盖
destSheet.Copy(sourceSheet);
dest.Save(filePath + @"a_out2.xlsx");
运行结果请查看附件 (27.8 KB)。
希望这些能对你有所帮助。
ok,我看看,感谢感谢!!!!!
还有个问题,为什么只有第一个表格是Sheet1,它就会报这个错误;
Aspose.Cells.CellsException:“The same worksheet name already exists”
后面的表格是Sheet2,名字也是一样的,就可以执行
请注意,当您使用以下行实例化新工作簿时:
Aspose.Cells.Workbook workbookDest = new Aspose.Cells.Workbook();
系统会自动添加默认工作表(以“Sheet1”命名),因为如果没有至少一个/单个工作表,新工作簿就无法存在。
不管怎样,我用最新版本测试了你的确切代码,它工作得非常好。 我没有得到任何例外。 请参阅附件中的输出 Excel 文件以供参考。
dst.zip (8.4 KB)
用下面的代码试下呢?
using Aspose.Cells;
class ExcelCopy {
static void Main(string[] args) {
Aspose.Cells.License license = new Aspose.Cells.License();
license.SetLicense(@“D:\无害共享传输.NET\Aspose.Total.lic”);
Aspose.Cells.Workbook workbookSrc = new Aspose.Cells.Workbook("D:\\无害共享传输\\C#_project\\execl\\白屏炸弹.xls");
Aspose.Cells.Workbook workbookDest = new Aspose.Cells.Workbook();
// 遍历源文件的所有表格
for (int i = 0; i < workbookSrc.Worksheets.Count; i++)
{
Aspose.Cells.Worksheet worksheetSrc = workbookSrc.Worksheets[i];
Aspose.Cells.Worksheet worksheetDest = workbookDest.Worksheets.Add(worksheetSrc.Name);
worksheetDest.Copy(worksheetSrc, new Aspose.Cells.CopyOptions());
style_Copy(worksheetSrc, worksheetDest);
}
// 移除第一个工作表
if (workbookDest.Worksheets.Count > 0)
workbookDest.Worksheets.RemoveAt(0);
workbookDest.Save("D:\\无害共享传输\\C#_project\\execl\\dst.xls");
Console.WriteLine("execl文件处理结束!");
}
private static void style_Copy(Aspose.Cells.Worksheet src_Sheet,Aspose.Cells.Worksheet dst_Sheet)
{
Aspose.Cells.Cells cellsSrc = src_Sheet.Cells;
Aspose.Cells.Cells cellsDest = dst_Sheet.Cells;
// 获取源文件和目标文件中使用的最大行号和列号
int maxRow = cellsSrc.MaxRow;
int maxColumn = cellsSrc.MaxColumn;
// 遍历源文件的单元格,复制给目标文件对应的单元格
for (int row = 0; row <= maxRow; row++)
{
for (int col = 0; col <= maxColumn; col++)
{
Aspose.Cells.Cell cellSrc = cellsSrc[row, col];
Aspose.Cells.Cell cellDest = cellsDest[row, col];
// 复制源单元格的数据到目标单元格
Style styleSrc = cellSrc.GetStyle();
Style styleDst = cellDest.GetStyle();
Font fontSrc = styleSrc.Font;
Font fontDest = styleDst.Font;
fontDest.Name = fontSrc.Name;
fontDest.Size = fontSrc.Size;
fontDest.IsBold = fontSrc.IsBold;
fontDest.IsItalic = fontSrc.IsItalic;
fontSrc.Underline = fontSrc.Underline;
int colorSrc = styleSrc.BackgroundArgbColor;
styleDst.BackgroundArgbColor = colorSrc;
cellDest.SetStyle(styleDst);
cellDest.PutValue(cellSrc.Value);
}
}
}
}
@aspose1111
请把
// 移除第一个工作表
if (workbookDest.Worksheets.Count > 0)
workbookDest.Worksheets.RemoveAt(0);
移到for 循环前面
@aspose1111
你也可以在添加前先检查一下是否存在同名的表格
Workbook wb = new Workbook(dir + "test (1).xlsx");
Workbook workbookSrc = new Aspose.Cells.Workbook("D:\\无害共享传输\\C#_project\\execl\\白屏炸弹.xls");
Aspose.Cells.Workbook workbookDest = new Aspose.Cells.Workbook();
// 遍历源文件的所有表格
for (int i = 0; i < workbookSrc.Worksheets.Count; i++)
{
Aspose.Cells.Worksheet worksheetSrc = workbookSrc.Worksheets[i];
Aspose.Cells.Worksheet worksheetDest = workbookDest.Worksheets[worksheetSrc.Name];
if(workbookDest != null)
{
//覆盖当前,或者删除后重写添加
}
else
{
worksheetDest = workbookDest.Worksheets.Add(worksheetSrc.Name);
}
worksheetDest.Copy(worksheetSrc, new Aspose.Cells.CopyOptions());
// style_Copy(worksheetSrc, worksheetDest);
}
这种方式可以解决,非常感谢!!!!